0

長すぎるコンテンツを非表示にする最初の jQuery プラグインを作成しました。

フィドルはhttp://jsfiddle.net/denislexic/bT4dH/6/で表示できます。

チェックアウトして「...」をクリックすると、最初のトグルは 3 回、2 回目は 2 回トグルし、3 回目は正しい (1 回だけ) ことがわかります。

なぜそれをしているのか、私にはわかりません。e.preventDefault()、、などを試しましたがstopPropagation()、何もうまくいかないようです。

問題と思われるコードは次のとおりです。

 $("." + opts.clickZoneClass).on("click", function (e) {
    _debugger(1);

    var element = $(this).parent('div').children('div.status');

    // I know you can use is(':visible'), but it doesn't work in Internet Explorer 8 somehow...
    if (element.hasClass('open')) {
        _debugger(2);
        element.animate({
            height:element.attr('data-toggle')
        }, 'fast');
        //$(this).html();
        element.removeClass('open');
    } else {
        _debugger(3);
        element.animate({
            height:element.attr('data-height')
        }, 'fast');
        element.addClass('open');
    }
    return false;
});
4

2 に答える 2

4

これは、上記のコードを$.eachループで実行しているためです。バインディングコードを引き出して、プラグインがうまく機能したらそれを実行するだけです。

説明のために、それを引き出してドキュメント準備機能に移動しました...

http://jsfiddle.net/bT4dH/10/

于 2012-08-31T16:21:10.470 に答える
0

要素を反復するときに、クリックイベントが複数回バインドされていると思います。この問題を解決するには、クリックする前に unbind メソッドを追加するだけです。

$("." + opts.clickZoneClass).unbind().on("click", function (e) {
    // existing stuff
});

これで問題が解決します。

于 2012-08-31T16:24:16.690 に答える