2012-02-21 66 views
4

我在我的代碼中有一個div,當我克隆它時,不會直接激發事件。 這是代碼;克隆後jQuery觸發器沒有觸發

<div id="draggable" onclick="alert(1);" class="ui-widget-content drag"> 
    <p>Drag me to my target</p> 
</div> 
<div id="here"> 
</div> 

<script type="text/javascript"> 
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here"); 
    $("#draggable2").trigger('onclick'); 
</script> 

當我點擊克隆的元素時,它會正常激發事件。

如果我改劇本,讓原始的元素觸發它的工作原理也未嘗不可:

<script type="text/javascript"> 
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here"); 
    $("#draggable").trigger('onclick'); 
</script> 

而且綁定功能正常工作:

<script type="text/javascript"> 
    $("#draggable").clone().removeAttr("id").attr('id', 'draggable2').appendTo("#here"); 
    $("#draggable2").bind('click', function() { alert('2'); }); 
    $("#draggable2").trigger('click'); 
</script> 

有沒有人對如何激發一個想法在克隆後直接克隆克隆元素的'標準'。

回答

20

爲了克隆元素及其事件,必須將「true」作爲第一個參數傳遞。要通過其子的事件,你也必須通過「真」作爲其第二argument.`

$myClone = $('#element').clone(true, true); 

http://api.jquery.com/clone/

0

這是一個從一開始就脆弱的方法。你有一個功能來創建一個克隆,然後你有一個函數在克隆後執行。爲什麼不在克隆之後調用該函數呢?製作可從點擊綁定中調用的可重用功能,或直接從克隆功能調用。

如果這是絕對必要的,您可以使用$(selector).click()這將觸發點擊事件。

[編輯:根據Fauntleroy的回答,我不知道需要傳遞'true',所以如果沒有這個建議,我的方法也行不通。但是,「這可能是一個壞方法」的一般建議]