0

次のコードがあります。

    function init() {
        var $contentButtonPanel: JQuery = $('#content-button-panel')
        $contentButtonPanel
            .find('.arbo .toggle, .collapsible-list li:has(ul) > :first-child, .collapsible-list li:has(ul) > :first-child + span')
            .click(function (event) {
                $(this).toggleBranchOpen();
            });
    }

    $.fn.toggleBranchOpen = function () {
        this.each(function () {
            $(this).closest('li').toggleClass('closed');
        });
        return this;
    };

デバッグすると、 $(this).toggleBranchOpen(); ラインに達します。ただし、コードはその関数内には入りません。

これは、toggleBranchOpen の宣言方法に問題がありますか? toggleBranchOpen が使用されるのは、init 関数のクリック イベント内のみであることに注意してください。そのコードを init に移動して単純化することは可能ですか?

4

2 に答える 2

1

このコードを試してください:

function init() {
    $('#content-button-panel')
        .find('.arbo .toggle, .collapsible-list li:has(ul) > :first-child, .collapsible-list li:has(ul) > :first-child + span')
        .click(function (event) {
            $(this).closest('li').toggleClass('closed');
        });
}

あなたがグローバル関数を必要としないことを示したので、私はコードを少し単純化しようとしました.

それが役立つことを願っています。

于 2012-12-10T03:46:46.677 に答える
0

宣言は大丈夫です。jQuery のプロトタイプを変更しているので、すべての jQuery オブジェクトですぐに使用できるようになります。

これは私を混乱させている行ですが、

var $contentButtonPanel: JQuery = $('#content-button-panel')

これは、より大きなファイルからコピーして貼り付けていることが原因だと思います。問題の特定に役立つ唯一のアドバイスは、このループ内にデバッグ情報を入れることです。

this.each(function () {
    $(this).closest('li').toggleClass('closed');
});

それ以外に、セレクターがli要素を見つけられない可能性はありますか?

于 2012-12-10T03:39:15.317 に答える