0

現在 BackboneJS サイトを持っていますが、問題が発生しました。jQuery.click() イベント ハンドラーを使用するバックボーン ビューが 1 つあります。現在、$(document).ready() 関数内でハンドラーをグローバルにセットアップしています。ただし、最初にハンドラーを使用するページをロードすると、すべてが正常に機能することに気付きましたが、ページを変更すると (バックボーンが表示するビューを変更します)、元のページに戻ります (ハンドラーを使用する DOM を更新します) ) その後、イベントはトリガーされなくなります。これをどのように処理すればよいですか?これは多くの人が遭遇する問題に違いないので、Backbone にはこれを処理する方法があると思います。

それ以外の場合、私の計画は、ビューがレンダリングされた後に関数を呼び出してハンドラーをリセットすることでした。これが最善の方法でしょうか、それともバックボーンにはこれを処理する方法がありますか?

$(document).ready(function(){
    $('.section-pulldown').on('click', function(){
        var el = $(this).next();
        var par = $(this).parent();
        var arrow = $(this).children('img');

        if (el.css('display') == 'none') {
            el.css('padding-bottom', '50px');
            arrow.attr('src', 'images/downarrow.png');
            par.css('box-shadow', '0px 0px 15px 3px #A8A8A8 inset');
            $(this).next().slideToggle(700);

        }
        else {
            $(this).next().slideToggle(700, function(){
                el.css('padding-bottom', '0px');
                par.css('box-shadow', '2px 2px 15px 2px #CCCCCC inset');
                arrow.attr('src', 'images/uparrow.png');
            });

        }

    });
})
4

1 に答える 1

3

次のようなものを試してください:

$(function() {
    $(document).on('click', '.section-pulldown', function(e) {
        var el = $(this).next();
        var par = $(this).parent();
        var arrow = $(this).children('img');

        if (el.css('display') == 'none') {
            el.css('padding-bottom', '50px');
            arrow.attr('src', 'images/downarrow.png');
            par.css('box-shadow', '0px 0px 15px 3px #A8A8A8 inset');
            $(this).next().slideToggle(700);

        }
        else {
            $(this).next().slideToggle(700, function(){
                el.css('padding-bottom', '0px');
                par.css('box-shadow', '2px 2px 15px 2px #CCCCCC inset');
                arrow.attr('src', 'images/uparrow.png');
            });

        }

    });
})

デリゲートとしての jQuery .on を参照してください

于 2013-05-27T18:18:23.040 に答える