先附上codepe:https://codepen.io/alanotmt/pen/PoRQpKB
如題,我透過jquery新增html碼,
但我新增選項並沒有套用按一下active,
再按一下取消active這功能,
請問要如何才能在新增選項時並能套用原本選項的功能?
var count = 0
function addli(){
count+=1
// 動態產生的DOM不會自動綁定事件,需要做Delegate
$('#navi').append('<li><a>'+count+'</a></li>');
}
function toggleActive(elm){
const a = $(elm).children("a")
if(a.hasClass('li a active')){
a.removeClass("li a active");
}
else {
a.addClass("li a active");
}
}
// jQuery Delegate:在父元素綁定事件,透過事件傳遞機制,到指定的子元素後,才會觸發事件。
$('#navi').on("click", "li", function(){
toggleActive(this)
});
後面新增的DOM沒有綁定到onclick事件
如果照你原本的code改 我可能會這樣寫:
var count = 0
function addli(){
count+=1
var button = document.createElement("li")
var a = document.createElement("a")
a.innerText = count
a.onclick = function(){
if($(this).hasClass('li a active')){
$(this).removeClass("li a active");
}
// 否則 add 'active'
else {
$(this).addClass("li a active");
}
}
button.append(a)
$('#navi').append(button);
}