DOM にまだロードされていない要素に作用するクリック イベントを作成するにはどうすればよいですか?
シナリオ:
- native-btn は、ドキュメントの準備ができたときに読み込まれる div です。
- ajax-loaded-element は、ajax フォームが一連のクライアント側イベントを実行した後に表示される div です。
私のイベントは次のとおりです。
$(".native-btn").click(function() {
$(".ajax-loaded-element").fadeOut();
});
.ajax-loaded 要素が応答しないようです。.live() は非推奨であり、.on() イベントは新しく挿入された要素と直接対話する場合にのみ適用され、二次的なアクションによって要素に作用することはありません。私が見逃している .on() の別の使用法はありますか?
ありがとう!
アップデート
にアクセスするために .on() イベントを使用しています。ajax-loaded-element div. ただし、.hide() や .css() などの基本的なイベントには応答しますが、最終的に必要な .trigger() には応答しません。
$(document).on("click", ".native-btn", function() {
$('.ajax-loaded-element').trigger('click');
$('.ajax-loaded-element').css("background-color","red");
});
背景が赤に変わりますが、トリガーは発火しません。CMS によってロードされている .ajax-loaded-element のデフォルト機能は、ajax フォームのページを進めることを付け加えておきます。デフォルト機能の前後にカスタムアニメーションを追加したいので、リモートでトリガーしようとしています。
全体のスクープ
ページ上のブロックとして表示される Drupal で複数ページの Web フォームを使用しています。私はそれに ajax クライアント側機能を割り当てたので、必要に応じてフォームを進めるために "PREV" および "NEXT" div を動的に挿入します。
UX の観点から、フォーム全体をフェードアウトさせ、フォームを次のページに進め、次にフォームをフェードインさせたいと考えています。ユーザーがフォームにあることを認識できないような瞬く間に変更するのではありません。高度。Webフォーム機能にアクセスできないので、jQueryとトリガーでやろうとしています。基本的なマークアップは次のとおりです。
<div id='webform'>
...form code...
<div class='ajax-loaded-next'>Next</div>
<div class='ajax-loaded-prev'>Prev</div>
</div>
<div class='native-btn-next'>NEXT</div>
<div class='native-btn-prev'>PREV</div>
$(document).on("click", ".native-btn-next", function() {
$('#webform').fadeOut();
$('#webform .ajax-loaded-next').trigger('click');
$('#webform').fadeIn();
});
$(document).on("click", ".native-btn-prev", function() {
$('#webform').fadeOut();
$('#webform .ajax-loaded-prev').trigger('click');
$('#webform').fadeIn();
});
次のようになります: (ajax NEXT/PREV は白、ネイティブの NEXT/PREV は黒)
ご覧のとおり、それは魅力のように機能する [次へ] ボタンだけで始まります。ウェブフォームがフェードアウトし、ajax-loaded-next トリガーがクリックされ、ページが進み、ウェブフォームがフェードインします。
しかし、02 ページには ajax-loaded-prev ボタンが表示されます。
フォームがロードされたとき、これは明らかに DOM にありませんでした。私の native-btn-prev は Web フォームをフェード インおよびフェード アウトしますが、クリックをトリガーしません。
それが理にかなっていることを願っています...