マイページ
>次に、ユーザーが記事のタイトルをクリックしたときに記事を div.contentd に動的にロードするとします。 :
コードをコピー
おそらく、最初に jQuery イベント処理について学び始めたとき、最初に目にした例は、クリック イベントを示す次のコードなど、ブラウザーがデフォルトの動作を実行しないようにする方法に関するものでした。 >
•適切なメソッドを選択します:
return false またはPreventDefault、stopPropagation または stopImmediatePropagation•適切な位置、開始、終了、または中間を選択しますどこか:
イベント コールバックのどの部分でブラウザのデフォルトの動作をキャンセルする必要がありますか? 注:
この記事でイベント バブリングについて言及するとき、私が言いたいのは、ほとんどのイベントは最初に発生し、DOM 上でトリガーされ、その後終了するということです。 DOM ツリーを介して親要素の各レベルでトリガーすると、イベントは兄弟ノードや子ノードでバブルアップしません (イベントがバブルダウンすることをイベント キャプチャ (イベント キャプチャ) と呼びます)。イベントについて詳しく学ぶことができます。ここでバブリングしてキャプチャします。
適切な方法を選択してください
「return false」が非常に誤用されている理由は、与えられたジョブが完了したように見えるためです。ブラウザは、href 内のリンクにリダイレクトされなくなり、フォームもリダイレクトされなくなります。 href 内のリンクは引き続き送信されますが、これを行うことの何が問題なのでしょうか?
「return false」とは具体的に何をするのでしょうか?「return false」を呼び出すたびに、実際には次の 3 つの処理が実行されます。
•event.preventDefault();•event.stopPropagation();
•コールバック関数の実行を停止し、すぐに戻ります。 「ちょっと待って」って叫んだよ!ブラウザーがデフォルトの動作の実行を停止するだけで、他の 2 つのことを実行する必要はありません。
これら 3 つのうち、ブラウザがデフォルトの動作を実行し続けるのを防ぐために使用されるのは、イベントのバブリングを停止しない限り、return false を使用すると、コードに多くの隠れた危険が植え付けられることになります。このような誤用の結果を実際の例で見てみましょう:
これは、デモに使用した HTML です:
コードをコピーします
ライブイベントや代表者によるイベントと混ぜると、状況はさらに悪化するでしょう。
preventDefault()
ほとんどの場合、return false を使用する場合、実際に必要なのは e.preventDefault() です。 e.preventDefault を使用するには、イベント引数をコールバック関数 (この場合は e) に渡す必要があります:
stopPropagation()
ただし、イベントのバブリングを停止する必要がある状況もあります。次の例を見てみましょう:
コードをコピー
コードは次のとおりです:
preventDefault と stopPropagation を同時に必要とし、コールバックの実行が完了するまで停止しないというブラウザのデフォルト動作をコードが受け入れることができる場合にのみ、「return false」を使用できます。ただし、他の jQuery 開発者向けに作成されたデモ コードではこのメソッドを使用しないことを強くお勧めします。誤用が増える可能性があるためです。また、「return false」は絶対に必要であると確信できる場合にのみ使用してください。
適切な場所を選択してください「return false」を使用すると、コールバック関数の実行後にブラウザのデフォルトの動作がキャンセルされるだけですが、e.preventDefault を使用すると、より多くのオプションがあり、いつでもブラウザを停止できます。関数内のどこに配置するか。
1. 開発段階では、を常に最初の行に置く必要があります。フォームを Ajax 送信に変更するためにデバッグしているときに、フォームがすでに古い方法に従って送信されているということは、最も避けたいことかもしれません。
2. 製品ステージ、プログレッシブ エンハンスメントを使用する場合は、コールバックの最後に配置するか、通常のページでプログレッシブ エンハンスメントを使用する場合は論理エンド ポイントに配置する必要があります。ブラウザが JS をサポートしていない (または無効になっている) 場合に、リンクのクリック イベントとフォームの送信イベントをサーバー側で処理する方法を検討してください。ここでの利点は、JS をオフにする場合は考慮せず、コールバック コードでエラーが発生して例外がスローされる場合のみを考慮していることです。
コードをコピーします
結論
ブラウザがデフォルトの動作を実行しないようにする必要がある場合に、この記事が正しい選択をするのに十分な情報を伝えてくれれば幸いです。 「return false」は、自分が何をしようとしているのかを本当に理解している場合にのみ使用し、関数内の正しい場所で対応するコードを呼び出していることを確認してください。最後に、コードを可能な限り柔軟にして、「return false」を再度使用しないようにしてください。