web-dev-qa-db-ja.com

PreventDefaultはFirefoxでは機能しません

HREFが実際にリンクを開かないようにして、スクリプトを実行しようとしています。スクリプト部分は機能しましたが、Firefoxはこれを無視するようです。

$("#permalink a").click(function(id){
  $("#newPost").fadeToggle;
  event.preventDefault();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
});

デフォルトを防ぐためのクロスブラウザスクリプトを誰かが提案できますか?

19
Tomer Lichtash

これに対する標準的な解決策は、click()ハンドラーから_return false_を実行することです。 _return false_は、イベントでpreventDefault()およびstopPropagation()を呼び出すのと同じです。 preventDefault()はこのタスクにも十分なので、それまたは_return false_のいずれかが機能します。

問題は、構文エラーと誤った名前のパラメーターのようです。そうですか:

  • fadeToggleには括弧がありません。
  • 関数パラメーターはidと呼ばれますが、event.preventDefault()を呼び出します。そして
  • 投稿をフェードアウトしてすぐに表示しますか?これは2つのアニメーションをキューに入れますが、あまり意味がありません。おそらく、これら2つのこととload()を合理的な方法で連鎖させたいと思うでしょう。

したがって、これは機能するはずです。

_$("#permalink a").click(function(event) {
  $("#newPost").fadeToggle();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
  return false;
});
_

この場合、_return false_をevent.preventDefault()に自由に置き換えることができますが、伝播するclick()イベントは、他のイベントハンドラーによっては、他の問題を引き起こす可能性があります。

29
cletus

これは常に機能します。Firefoxには「イベントハンドラ」が必要です。Chromeは必要ありません。これはすべてのブラウザで機能します。

$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}
20
evan tedeschi
            $("#permalink a").click(function(id){

する必要があります

            $("#permalink a").click(function(event){

その後

var id=event.target;

作業中のオブジェクトが表示され、event.preventDefault()はデフォルトのアクションを停止します。

通常、私はfalseを返します。私自身ですが、これは両方ともデフォルトのアクションを防ぎますandイベントの伝播を停止します。これは、他のイベントハンドラーでは予期していなかった効果をもたらす可能性があります。

14
ijw