2010-12-06 14 views
8

私はjQueryを使って各ボックスからアイテムを追加/削除できる一連のdivボックスを作成しています。ボックスに新しい要素を追加した後、その要素にバインドしたクリック機能は応答しません。私のコードはおおよそ次のようになります:jQuery関数はappend()の後に応答しません

$(".add").click(function() { 
$("#targetbox").append("<span class='remove'>This element was added</span>"); 
}); 

$(".remove").click(function() { 
alert("removing"); 
$(this).remove(); 
}); 

#targetboxにアイテムをあらかじめ入力すると、それらはクリック機能に応答します。関数に応答しない動的に追加された項目だけです。

答えて

15

直接新しく追加要素

$(".add").click(function() { 
    $("#targetbox").append("<span class='remove'>This element was added</span>") 
    .bind("click",function(e) { 
     alert("removing"); 
     $(this).remove(); 
    }); 
}); 

またはいずれかの新しい.remove要素

$(".add").click(function() { 
    $("#targetbox").append("<span class='remove'>This element was added</span>"); 
}); 

$(".remove").live("click", function() { 
    alert("removing"); 
    $(this).remove(); 
}); 
+0

"live()"メソッドについて知りませんでしたが、それはかなり便利です! –

11

あなたのコードはすべての要素のクリックイベントを処理します現在$('.remove')です。
まだ存在していない要素は影響を受けません。

.live()または.delegateメソッドを呼び出す必要があります。これらのメソッドは、いつセレクタに一致するすべての要素のイベントを処理します(作成時に関係なく)。例えば

:あなたのコードが実行されると、アイテムがまだ追加されていないので、

$(".remove").live('click', function() { 
    alert("removing"); 
    $(this).remove(); 
}); 
+0

感謝を追加した後、あなたのためのクリックイベントをバインドします.live()メソッドを使用するには、クリックメソッドを追加します。君は!これは完全に機能します。 – Jarred

1

にです。クリックの追加機能で追加した後、新しいブロックに動的に割り当てられるように、クリック解除機能を追加する必要があります。

$(".add").click(function() { 
    $("#targetbox").append("<span class='remove'>This element was added</span>"); 
    // Add code here for .remove click function 
}); 
関連する問題