【问题标题】:jquery clone + live issuesjQuery 克隆 + 实时问题
【发布时间】:2012-02-06 02:15:09
【问题描述】:

我有一段 html,我想复制并在新复制的块特定处理程序中分配特定选择。我的问题是处理程序被触发 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>

【问题讨论】:

    标签: javascript jquery html clone


    【解决方案1】:

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

    将行改为:

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

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

    或者,您可以留下clone(true),而不是向其中添加事件。

    【讨论】:

    • $("#" + this.sTemplateBlockID).clone(true);在这一行中,我只是克隆了这个没有分配给任何处理程序的 html 块;我将其更改为 false - 结果相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多