1

この方法で呼び出すjQueryUI関数がいくつかあります。

jQuery(document).ready(function(){
    jQuery(".accordion").accordion();
});

しかし、私のページはAJAXベースであり、アコーディオンを使用しているページもあれば、使用していないページもあります。問題のある開発タスクである、再接続する必要がある30以上の他の機能があります。すべての新しいもの.accordionがこれを自動的に添付するようにこれを修正する賢い方法はありますか?

考えられる解決策とそれらが機能しない理由:

  • AJAX呼び出し終了時にドキュメントの準備ができていることをトリガーするのが理想的ですが、それは不可能です
  • これは、ユーザーがプラグインをインストールできるCMSであるため、オプションでload()はありません。つまり、プラグインが使用する場合にのみ追加される不明な機能の数は不明です。jQuery(document).ready();
  • 関数を再接続しますajaxComplete-不明な数の不明な関数を使用すると、jQueryプラグインをインストールまたはアンインストールするたびにAJAXスクリプトを変更しないと機能しません
4

5 に答える 5

5

DOMNodeInsertedイベントを使用して、アコーディオン クラスを確認できます。

document.addEventListener('DOMNodeInserted', function(e) {
    var el = $(e.target);
    if(el.hasClass('accordion')) {
        el.accordion();
    }
});

DOMNodeInserted の使用例: http://jsfiddle.net/qErHs/

于 2013-02-04T18:48:06.120 に答える
3

jQueryウィジェットにも同様の問題があります。私がしたことは、ajaxComplete メソッドを使用してウィジェットをアタッチすることでした。

$(document).ajaxComplete(function()
    {
        $(".accordion").accordion();
    });

そうすれば、関数は AJAX メソッドが完了するたびに呼び出され、クラス accordion を持つ新しい要素にアコーディオンをアタッチします

于 2013-02-04T17:53:51.253 に答える
1

http://api.jquery.com/on/

「委任されたイベントには、後でドキュメントに追加される子孫要素からのイベントを処理できるという利点があります。」

jQuery(document).on("change", ".accordion", function() {
  jQuery(".accordion").accordion();
});
于 2013-02-04T18:11:14.727 に答える
0

「.accordeon」の長さを確認できます。関数を作成するだけです...

function init_accordeon(){
    if($('.accordeon').length) {
        $(".accordon").accordeon();
    }
}

そして、ajax_calls の後にこの関数を呼び出します。

于 2013-02-04T17:51:19.527 に答える