0

ボタンを含む新しいdivを作成すると、割り当てたクリック機能にボタンが応答しない理由がわかりません。どういうわけか構文が台無しになったと確信しています。理想的には、[新しいカテゴリ] ボタンをクリックすると、それが含まれているトピック div 内に新しいカテゴリ div が作成されますが、アラート機能にも応答しません。

$(":button.Topic").click(function (event) {
    $("body").append(TopicDiv);
});

//when Category class button is clicked, append Category Div to parent of button clicked
$("button").on("click", function () {
    alert("Hello!");
    /*$( this ).parentNode.append(CategoryDiv);*/
});

これが jsFiddle です: http://jsfiddle.net/KrsVp/5/

4

3 に答える 3

2

イベント委任を使用する必要があります。

$(document).on("click", ":button.Category", function () {
    alert("Hello!");
    /*$( this ).parentNode.append(CategoryDiv);*/
});

親要素にイベントをリッスンさせてから、子が:button.Categoryセレクターに一致するかどうかをチェックさせるという考え方です。

親に最も近いほど、最高のパフォーマンスが得られます [つまりdocument、可能な場合は使用しないでください]。

于 2013-07-30T16:55:19.713 に答える
0

次のようなことをすると:

$("button").on("click", ... 

そのセレクターに一致するすべての要素にイベント ハンドラーをアタッチしています。そのコード行が実行されるとき、動的に追加された要素はまだ存在しないため、それらの要素にはイベント ハンドラーがアタッチされません。

ただし、次のようなことをすると:

$(document).on("click", "button", ...

イベント ハンドラーをドキュメント要素にアタッチし、イベントをその中の任意のボタン要素に委任します。これにより、動的に追加された要素がこのハンドラーを正しくトリガーすることが保証されます。

于 2013-07-30T16:56:41.407 に答える
0

問題は、ボタンがまだ DOM に追加されていないことです。コードは、OTHER DIV の子ボタンがクリックされたときにのみ DIV を作成します。ただし、DIV またはその子ボタンは存在しません。したがって、どちらの DIV もクリックする必要はありません。また、DIV が DOM の準備完了状態にある場合は、追加された DIV のボタンにもクリックを追加する必要があります。

于 2013-07-30T16:57:43.417 に答える