これは、IE8 (およびおそらく IE7 ですが、まだ試していません) を除くほぼすべてのブラウザーで動作するようですが、その理由はわかりません。
$('body')
.on('click', '.toggle', function(e){
$(this).toggleClass('active');
e.preventDefault();
e.stopPropagation();
});
に分類されたリンクをクリックするtoggle
と、ブラウザは にもかかわらずページのトップに移動しますe.preventDefault()
。問題を調べると、 false を返したり、設定したりするなどの解決策を見てきましたevent.returnValue = false
。e.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を返すことは、今私にとってうまくいっています。正しい方向に私を押してくれてありがとう!