2012-01-09 5 views
2

나는 복사하고 싶은 특정 hanlders를 복사 한 새 덩어리로 선택하고 싶습니다. 내 문제는이 청크를 복사 할 n 번 처리기가 트리거되고 있다는 것입니다. 이 문제를 디버깅하는 제안? (총 목록 : total listing)jquery 복제본 + 라이브 발행물

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

당신은 clone(true)를 사용하는을 - 진정한는 요소가 복제되는 것을 나타냅니다, 그들이 그 (것)들에 놓은 사건과 함께. 그런 다음 더 많은 이벤트를 복제본에 추가하므로 복제가됩니다.

변경 라인 :

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

또는 필요한 경우 기본 anwyay입니다 된대로 false를 생략 할 수 있습니다.

또는 clone(true)을 그대로두고 단순히 이벤트를 추가하지 않아도됩니다.

+0

$ ("#"+ this.sTemplateBlockID) .clone (true); 이 줄에서는 간단히이 html 청크를 복제합니다.이 청크는 핸들러에 할당되지 않았습니다. 나는 그것을 거짓으로 바꿨다 - 같은 결과 –