1

live() (現在は jQuery から削除されています)、delegate()、および on() のすべてのドキュメントを確認しました。この問題で 8 時間頭を悩ませた後、私はそれを修正する方法がわかりません。AJAJ 経由で取り込まれたデータから作成される一連のリンクに匿名関数を追加したいと考えています。私は次のコードを試しました:

$("#more_items_outer").on(
            'click',
            '.show_more',
            function(a){
                var target = a.parentElement;
                if (target.is(":visible")){
                    target.hide("slow");
                } else {
                    target.show();
                }
            }
        );

このコードは、ページの読み込み後に開発ブラウザーの JS コンソールで実行すると正常に動作します。しかし、実際のリンクが作成される前にこのコードが実行された場合、このコードはこれらのリンクに対して何もしません。私が理解しているように (そして、公式の jQuery ドキュメントを含む複数のソースで説明されているように)、上記のコードで使用した on() 関数は、クラス "show_more" のすべての要素が作成されるようにする必要があります。 ID「more_items_outer」を持つ要素の子孫として、クリックすると無名関数が実行されます。これは、新しい要素の作成がこのコードの実行より後の日付であっても当てはまります。ここの私の開発システムではそれは起こっていません。それが役立つ場合、私はjQuery 1.9.1を実行しています。

4

1 に答える 1

3

まず、以下の項目5を確認してください。クリックイベントハンドラー関数にJavaScriptエラーがいくつかあるように見えます。

一般に、動的な形式の.on()作品は次のようになります。

$(static selector that exists).on('click', 'dynamic selector', function() {});

HTMLやajaxを表示していないので、うまくいかない可能性のあるものの種類を列挙することができます。

  1. 静的セレクターによって表されるオブジェクトは、.on()呼び出しの実行時に存在している必要があります。
  2. 静的セレクターオブジェクトは、動的オブジェクトの親である必要があります。
  3. 動的セレクターは、元の呼び出し時に存在するか、後で追加される子オブジェクトと一致する必要があります。
  4. .on()呼び出しの前にjavascriptエラーが発生し、実行されない可能性があります。
  5. ハンドラー関数にjavascriptエラーがあるようです。参照するコードがa.parentElement間違っているようです。そのコンテキストでは、はjQueryイベントオブジェクトであり、プロパティaがあるとは思いません。parentElementまた、parentElementが要素であったとしても、jQueryオブジェクトではないtarget.is(":visible")ため、次の行は機能しません。targetしたがって、少なくともハンドラー関数のコードを修正する必要があります。これが唯一のエラーである場合は、javascriptエラーコンソールまたはデバッグコンソールで参照されているこれらのエラーを確認できるはずです。
于 2013-02-23T01:30:40.057 に答える