2012-01-09 13 views
2

私はコピーしたい特定の選択肢を新しいコピーチャンクの特定のハンダーに割り当てたいと思っています。私の問題は、ハンドラがこのチャンクをコピーしてn回トリガされていることです。この問題をデバッグするための提案はありますか?あなたはclone(true)を使用しているjqueryクローン+ライブの問題

<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

- 真は、要素が複製されなければならないことを示しています(合計リスト: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のチャンクを何度もコピーします彼らが設定したイベントと一緒に。クローンにはさらに多くのイベントが追加されるため、重複が発生します。

変更する行:

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

、または必要な場合には、デフォルトのanwyayであるとして、あなたが、falseを省略することができます。

また、clone(true)のままにして、単にイベントを追加しないでください。

+0

$( "#" + this.sTemplateBlockID).clone(true); この行では、単にハンドラに割り当てられていないhtmlチャンクをクローンします。私はそれを偽に変更しました - 同じ結果 –