jQueryのon
イベントハンドラは、動的に作成された要素を '聴く'ことができ、振る舞いをlive
に置き換えることになっていたという印象を受けました。しかし、私が経験したことはon
を使用して成功してlive
を使用し、一方、クリックイベントをキャプチャされていないということです!動的に生成されたモーダルポップアップにjQuery 'on'が登録されていません
私の状況のトリッキーな側面は、コンテンツを動的に作成するだけでなく、AJAX .get()
コールを使用して結果のHTMLをモーダル.dialog()
jQueryUIポップアップに挿入することです。
$.get("getUserDataAjax.php", queryString, function(formToDisplay) {
$("#dialog").dialog({
autoOpen: true,
modal: true,
buttons...
}).html(formToDisplay);
});
$(".classThatExistsInFormToDisplay").on("click", function() {
alert("This doesn't get called");
});
on
のドキュメントから、私は私が私のon
イベントを書いて近づいていた方法だったこれこれを見つけた:ここ
$(document).ready(...)
に包まれた)私が達成しようとしたものの簡易版である
$("p").on("click", function(){
alert($(this).text());
});
しかし、何らかの理由で、live
は、私が期待どおりに動作します - on
が私を失敗しているのに対し。
私はそれ内部function(formToDisplay)
コールバック宣言する場合on
は(キャプチャクリックを)成功することを発見したので、これは「をどのように私はそれを動作させることができます」の問題ではありません。
質問:on
モーダルポップアップ内で動的に作成された要素が見つかりませんでしたか?私のjQueryインスタンスはjquery-1.7.2です。 jQueryUIは1.8.21です。
は、ここで問題に近似する2 jsFiddlesです。別の動作を確認するために両方のインスタンスに単語「テスト」をクリックしてください。コード内の唯一の違いは、live
ためon
を置換されています。 the clickがlive
によって捕獲され
。
on
でキャプチャされていないthe click(「テスト - クリック」をクリックしても何も起こりません)。
は私がちょうど不適切on
を使用して、または意図されていなかった何かをすることを求めてすることができる実現が、私が知りたいなぜそれが機能していない(しかし、あなたはひどく巧妙な何かを持っている場合は、共有すること自由に感じ)。あなたの知恵をありがとう!
更新/回答/ソリューション:
ユーザーによると、違いはon
がlive
がないのに対し、document
オブジェクトの上からすべての方法を委任されていないということである、「未定義」/です。クラウディオが言及したよう
は、そこに動的に作成された要素を参照on
文書の一部であり、その何を実行に存在する必要がクエリの$("")
一部に含まれています。
私の新しい解決策は次のとおりです。キャプチャクリックイベントon
モーダルダイアログボックス。実行時にイベントが作成されたときにコンテンツはありませんが、生成される特別なクラスのコンテンツと要素を見つけることができます後で。
$("#dialog").on("click", ".classThatExistsInFormToDisplay", function() {
... //(success! Event captured)
});
ありがとうございます!
魅力的!あなたの提案が成功したことがわかりました。どのように壮大!私は 'on'イベントをModalダイアログに添付して、実際に気をつけたいクラスへのクリックを制限しました。これは私のクラス(仮定)でキャプチャするよりも多くのトリガーになりますが、これは素晴らしい解決策のようです。ご回答有難うございます! – veeTrain
@veeTrainあなたは大歓迎です。 – undefined
あなたは命の恩人です!ありがとうございました。 – Agent007