过去我也遇到过类似的问题,因为我没有使用委托事件。现在我正在使用委托事件,但它仍然不适用于新更改的 id。这个委托事件对 dom 更改不起作用的原因是什么,我将如何解决这个问题?
这是两个 div 交换 id 'show' 的示例。每当单击“显示”列表项时,它应该使用委托事件 .on 触发,但事实并非如此。
<style>.hide {display:none;}</style>
<div id="show">
<span id="number" class="hide">2</span>
<span id="list" class="hide">item1,item3</span>
<ul class="img_list">
<li>Something</li>
<li>Something</li>
<li>Something</li>
</ul>
<div class="box">
<button type="button" class="hide" id="checkanswer">check answer</button>
</div>
</div>
<div class="hide">
<span id="number" class="hide">1</span>
<span id="list" class="hide">item1</span>
<ul class="img_list">
<li>Something</li>
<li>Something</li>
</ul>
<div class="box">
<button type="button" class="hide" id="checkanswer">check answer</button>
</div>
</div>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
var selection_required=$('#show #number').html();
$('#show').on('click', '.img_list li', function(){
if($(this).hasClass("selected")){
$(this).removeClass("selected");
}
else{
$(this).addClass("selected");}
if ($('.selected').length==selection_required){
$("#show #checkanswer").fadeIn( "slow", function() {});
}
else{
$("#show #checkanswer").fadeOut( "slow", function() {});
}
});
$('#checkanswer').click(function(){
parent=$(this).parent().parent();
next=$(this).parent().parent().next();
parent.removeAttr("id");
parent.addClass("hide");
next.attr("id","show");
next.removeClass("hide");
selection_required=next.find('#number').html();
item_array=next.find("#list").html();
next.show();
});
</script>