我有一段 html,我想在新复制的 block 特定处理程序中复制和分配特定选择。我的问题是处理程序被触发 n 次我复制这个 block 。有什么调试这个麻烦的建议吗? (总 list :total listing)
J查询代码:
"appendNewBlockTo" : function(oAppendTo, sFilterByCName){
var iIndex = $("." + sFilterByCName).length/2;
var oNewPlayerCS = $("#" + this.sTemplateBlockID).clone(false);
// alter template before copying
$(oNewPlayerCS).find("." + this.sClassListboxCName).addClass(sFilterByCName).attr('index', iIndex).live($.browser.msie ? 'click' : 'change', function(){PlayerCS.enableSListbox(sFilterByCName, iIndex);});
$(oNewPlayerCS).find("." + this.sSpecListboxCName).addClass(sFilterByCName).attr('index', iIndex);
$(oNewPlayerCS.removeAttr('id').removeAttr('style')).appendTo(oAppendTo);
},
要多次复制的 HTML block :
<div id="playerCSTemplate" style="display:none;">
<select class="class_listbox">
<option selected="selected" value="0">Class</option>
<option class="class_value" value="1">mage</option>
<option class="class_value" value="2">priest</option>
</select>
<select class="spec_listbox" disabled>
<option value="0">Unknown</option>
<option class="spec_class class_specs_1">Frost</option>
<option class="spec_class class_specs_1">Fire</option>
<option class="spec_class class_specs_2">Holy</option>
<option class="spec_class class_specs_2">Shadow</option>
</select>
</div>
最佳答案
您正在使用 clone(true)
- true 表示应克隆元素以及它们在其上设置的事件。然后,您将向克隆中添加更多事件,从而产生重复。
将行更改为:
var oNewPlayerCS = $("#" + this.sTemplateBlockID).clone(false);
或者如果需要,您可以省略 false
,因为它是默认值。
或者,您可以保留 clone(true)
并且不向其中添加事件。
关于javascript - jquery 克隆 + 实时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8790216/