jquery clone + live issues

时间:2012-01-09 14:49:42

标签: javascript jquery html clone

我有一段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>

1 个答案:

答案 0 :(得分:1)

您正在使用clone(true) - true表示应克隆元素以及它们在其上设置的事件。然后,您将向克隆添加更多事件,因此重复。

将行更改为:

var oNewPlayerCS = $("#" + this.sTemplateBlockID).clone(false); 

或者,如果需要,您可以省略false,因为它是默认的anwyay。

或者,您可以离开clone(true),而不是将事件添加到其中。