2012-02-21 18 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

それは最初から壊れやすいアプローチだとして「true」を渡す必要があります。クローンを作成する機能があり、クローン作成後に実行する機能があります。クローン作成後にその機能を呼び出すだけではどうですか?クリックバインディングから呼び出すことができる、またはクローン関数から直接呼び出される再利用可能な関数を作成します。

クリックイベントを発生させる$(selector).click()を使用するだけでもかまいません。

[編集:私はFauntleroyの応答に応じて 'true'を渡す必要があることを認識していませんでした。そのアドバイスがなければ、私のアプローチはうまくいかないでしょう。しかし、 "これはおそらく悪いアプローチ"との一般的なアドバイスは、

関連する問題