3

これは、IE8 (およびおそらく IE7 ですが、まだ試していません) を除くほぼすべてのブラウザーで動作するようですが、その理由はわかりません。

$('body')
    .on('click', '.toggle', function(e){
        $(this).toggleClass('active');
        e.preventDefault();
        e.stopPropagation();
    });

に分類されたリンクをクリックするtoggleと、ブラウザは にもかかわらずページのトップに移動しますe.preventDefault()。問題を調べると、 false を返したり、設定したりするなどの解決策を見てきましたevent.returnValue = falsee.preventDefault()最初にテストしてから、条件が満たされない場合は代替案を実行することで、これらの両方を試しました。

戻り値の設定:

$('body')
    .on('click', '.toggle', function(e){
        if (e.preventDefault()) {
                e.preventDefault();
            } else {
                e.returnValue = false;
            }
        $(this).toggleClass('active');
    });

ある投稿で提案されているように、バインドされた関数に渡されるのreturnValueではなく、グローバルイベントオブジェクトを設定して、それを試しました。e

falseを返す私の試み:

$('body')
    .on('click', '.toggle', function(e){
        if (e.preventDefault()) {
                e.preventDefault();
            }
        $(this).toggleClass('active');
        return false;
    });

これらのさまざまな試行にもかかわらず、IE8 はリンクのデフォルト アクション実行しており、クラスを切り替えていません。ここで何が間違っていますか?jQuery 1.10.2 を使用しています。

更新:問題の根本に到達しました。皆さん、助けてくれてありがとう。非 IE 用のスクリプト要素を条件付きで含めていましたが、このスクリプトはその 1 つです。falseを返すことは、今私にとってうまくいっています。正しい方向に私を押してくれてありがとう!

4

2 に答える 2

3

ここ以外の場所で JS にエラーがあります。実行が停止しているため、イベント ハンドラがバインドされません。

開発ツール (F12) を開き、ページを更新すると、スクリプト エラーが表示されます。これが問題の原因です。

また、覚えておいてください

e.preventDefault();
e.stopPropagation();

と同じです

return false;

また、stopPropagation() と body 要素にバインドされたイベント ハンドラーもちょっと奇妙ですが、イベントがドキュメントにバブリングするのを止めると思います...

編集#2

3 つのことのうちの 1 つが起こっています - 1) 実行を停止し、ハンドラーがバインドされない他の場所のコードにエラーがあります。2) イベントハンドラー内のコードにエラーがあります (あなたが投稿したものからではありません)。または 3) 特に IE8 でこのイベント ハンドラー (または body 要素のすべてのイベント ハンドラー) をアンバインドする (可能性は低い)。

いくつかの console.log の追加を開始して、上記のどれが問題を引き起こしているかを突き止めます。

完全に明確にするために、イベント ハンドラーは次のようになります。

$('body').on('click','.toggle',function(e) {
     e.preventDefault();
     $(this).toggleClass('active');
});
于 2013-09-24T16:56:00.650 に答える
2

IE8eventオブジェクトにはメソッドがありませんpreventDefault。コードでそれを呼び出すと、コンソールに次のようなエラーが表示されます。

TypeError: Object #<MouseEvent> has no method 'preventDefault'

このエラーにより、スクリプトがすぐに停止するため、アンカーは、href に従う主要なジョブを実行できます。その使用の代わりに:

$('body').on('click', '.toggle', function(e){
    $(this).toggleClass('active');
    return false;
});
于 2013-09-24T17:03:41.273 に答える