2011-08-05 7 views
0

私はデータベースの要素であるdivのセットを持っており、それぞれのイベントを設定したいので、それらのうちの1つをクリックするとクローンが作成されます。私が何かをしようとしたが、それはうまくいきませんでした、 ここに私のページ上のコードである :JQueryで変数html要素を複製する方法

<% @ideas.each do |idea| %>  
<div id="idea_<%=idea.id%>" class="idea"> 
    <%= idea.title %> 
</div> 
<% end %> 

そしてここでは、CoffeeScriptのコードです:

ideas = document.getElementByClassName("idea") 
for iter in [0..ideas.length - 1] 
    do -> 
    ideas[iter].(get_id).click -> ideas[iter].(get_id).clone().appendTo('.container'); 

任意のアイデア?

答えて

1

ここでは、あなたが探しているものを行うはずの少し修正されたバージョンです。 Javascript/Coffeescriptで常に心に留めておくべきことは、コードが実行されるスコープです。doキーワードを使用して、iter変数が正しくキャプチャされるようにすることが非常に重要です。クリックハンドラーが実際に実行するまでには、iterはループの最後に到達するため、考えをクリックすると、最後のアイデアは常にクローンになります。

ideas = document.getElementByClassName("idea") 
for iter in [0...ideas.length] 
    do (iter) -> 
    ideas[iter].click -> ideas[iter].clone().appendTo('.container'); 

ここでは、ビットクリーナーも同様に変更されています。 jQueryはすべてのiteractionを処理できます。

$('.idea').click -> 
    $(@).clone().appendTo('.container') 

「get_id」部分で何をしようとしていますか?私はちょっと無視しているので、私が誤解すれば教えてください。

編集:

一度だけクローンに、最も簡単な方法は、代わりに「バインド」のjQueryの'one'メソッドを使用することです。

$('.idea').one 'click', -> 
    $(@).clone().appendTo('.container') 
+0

最後のアプローチは最高です.jQueryが 'クリック'コールバックのクリックされた要素を指し示すように 'this'を設定すると' iter'をキャプチャする必要はありません。 –

+0

はい、それは動作し、それは私が欲しいものです、ありがとう、たくさん。 – kbaccouche

関連する問題