JQuery Clone + живые вопросы - PullRequest
2 голосов
/ 09 января 2012

У меня есть кусок html, который я хотел бы скопировать и назначить определенные выборки в новом скопированном блоке конкретных обработчиков.Моя проблема в том, что обработчик запускается n раз, когда я копирую этот чанк.Любые предложения по устранению этой проблемы?(общий список: общий список )

Код 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 Ответ

1 голос
/ 09 января 2012

Вы используете clone(true) - значение true указывает, что элементы должны быть клонированы вместе с событиями, которые они на них установили. Затем вы добавляете больше событий к клонам, следовательно, дублирование.

Измените строку на:

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

Или вы можете опустить false, если требуется, так как это по умолчанию.

Кроме того, вы можете оставить clone(true) и просто не добавлять к нему события.

...