我有一段html,我想复制并在新复制的块特定hanlders中分配特定选择。我的问题是处理器被触发n次我复制这个块。有没有调试这个麻烦的建议? (总列表:total listing)
Jquery代码:
"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块:
<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>
答案 0 :(得分:1)
您正在使用clone(true)
- true表示应克隆元素以及它们在其上设置的事件。然后,您将向克隆添加更多事件,因此重复。
将行更改为:
var oNewPlayerCS = $("#" + this.sTemplateBlockID).clone(false);
或者,如果需要,您可以省略false
,因为它是默认的anwyay。
或者,您可以离开clone(true)
,而不是将事件添加到其中。