11

次のJavaScriptコードサンプル:

var myButton = $('#myButton');
myButton.click(function (event) {
    /* stuff... */
    event.preventDefault();
});

デフォルトの長所と短所は何ですか?関数の最初または最後のアクションを防ぎますか?-最終的に無条件に阻止したい場合を想定。片道を選ぶ技術的な理由はありますか?

インターネットをサーフィンしていると、参照が1つだけ見つかりました-デッドブログ、Googleキャッシュリンクをお詫びします-そして、最初にデフォルトのアクションを防ぐと、js関数がクラッシュした場合にアクションが発生しないようになると指摘しています。

:この例では、わかりやすくするためにjQueryを使用しました。質問は、jQueryに関するものではなく、従来のイベント処理モードの答えは同じです。

4

3 に答える 3

11

あなたが言った理由で、私は私の防止コードを最初に置きました。関数の初期のjsでエラーが発生した場合、デフォルトのアクションはすでに防止されています。これは本番環境で望ましい動作になる可能性がありますが、開発コードのデバッグにも役立つ可能性があります。次のことを考慮してください。

$('a').on('click', function(e) {
  console.log('some debugging information here');
  // Other stuff
  e.preventDefault();
});

エラーが発生した場合、デバッグ情報を読み取る前に、ページが更新されるか、アンカーのhrefに従う可能性があります。アクションを一番上に切り替えると、コンソールで出力を読み取れるようになります。

編集Axelがコメントで指摘しているように、もう1つの利点は、コードがデフォルトのアクションを置き換えており、それを補足していないことをすぐに理解できることです。

于 2013-01-03T15:58:22.863 に答える
3

どこに置くかという最後の呼びかけpreventDefault()は、完全に開発者の選択にかかっています。ほとんどの場合、すでに指摘されているように、次のような予測できない動作を避けるために、コードの一番上に配置することをお勧めします。

 $('#one').click(function(ev){
  //ev.preventDefault(); // for 90% this is better choice, consider example below
  alert('no hey!');
  return; // this is very simple example, in more complex code sometimes it could not be such obvious
  ev.preventDefault(); // sometimes though it may be required to keep default action depending on some cases
})

しかし、私のポイントではこれはまれな状況であるため、何かに応じてデフォルトのアクションを保持している可能性があることを認める必要がありますが、デフォルトを防ぐことを最下部に置き、if条件でreturnを使用することができます。

于 2013-01-07T13:06:48.827 に答える
0

違いはありません。メッセージキューは関数にトラップされます。

于 2013-01-03T15:58:40.110 に答える