ホームページ ウェブフロントエンド jsチュートリアル return false_javascript スキルの正しい使用方法の簡単な分析

return false_javascript スキルの正しい使用方法の簡単な分析

May 16, 2016 pm 05:17 PM
false return

おそらく、最初に jQuery イベント処理について学び始めたとき、最初に目にした例は、クリック イベントを示す次のコードなど、ブラウザーがデフォルトの動作を実行しないようにする方法に関するものでした。 >

コードをコピー コードは次のとおりです:$("a.toggle").click(function () {
$( "#mydiv").toggle();
return false; // ブラウザが `#` にアクセスするのを防ぎます


この関数は、またはを表示するためにトグルを使用します。 #mydiv を非表示にし、ブラウザが href で指定されたリンクにアクセスし続けるのを防ぎます。

上記のような例では、ブラウザがデフォルトの動作を実行しないようにするために「return false」を使用するという悪い習慣がユーザーに身につきます。この記事では、ブラウザがデフォルトの動作を実行しないようにする 2 つの非常に重要な方法について説明します。重要なトピック:

•適切なメソッドを選択します:

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 です:


コードをコピーします

コードは次のとおりです:

マイページ

>

>

他のページ


text...




次に、ユーザーが記事のタイトルをクリックしたときに記事を div.contentd に動的にロードするとします。 :




コードをコピー

コードは次のとおりです:
jQuery(document).ready(function) ($) { $("div.post h2 a").click(function () { var a = $(this), href = a.attr('href'), / / jQuery で `href ` を正規化します。 content = a.parent().next(); content.load(href " #content"); // デフォルトを「キャンセル」します。リンクをたどる動作
})
);
このコードは (少なくとも現時点では) 正常に動作しますが、この考え方に沿って続けると、ユーザーが div.post 要素 (またはその子) をクリックしたときにメッセージを表示したい場合はどうすればよいでしょうか。アクティブなクラスを追加するには、クリック コールバックを div.post に追加する必要があります:
コードをコピーコードは次のとおりです:

// ドキュメントの準備完了内:
var Posts = $("div.post");
Posts.click(function () {
/ / すべての div.post からアクティブを削除します
Posts.removeClass("active");
// これをこれに追加し直します
$(this).addClass("active")
} ) ;

ここで、投稿のタイトルをクリックすると、このコードは機能するでしょうか?答えは「いいえ」です。タイトルのクリック コールバックで、本来使用すべきものではなく return false を使用したためです。「return false」は、event.preventDefault(); と、event.stopPropagation(); に等しいため、イベントのバブリングは次のようになります。終了すると、クリック イベントは div.post にバブルアップされず、それに追加したイベント コールバックは当然呼び出されません。

ライブイベントや代表者によるイベントと混ぜると、状況はさらに悪化するでしょう。

コードをコピー コードは次のとおりです。

$("a").click( function () {
// 何かを実行します
return
});

$("a").live("click", function () {
/ / これは起動しません
});

では、本当に必要なものは何でしょうか?

preventDefault()

ほとんどの場合、return false を使用する場合、実際に必要なのは e.preventDefault() です。 e.preventDefault を使用するには、イベント引数をコールバック関数 (この場合は e) に渡す必要があります:

コードをコピー コードは次のとおりです。

$("a").click(function (e) {
// e == イベント データ
e. PreventDefault();
});

これによりすべての作業が行われますが、設定する制限が少なくなるほど、親ノードがイベントを処理し続けることが妨げられないことに注意してください。コードが柔軟であればあるほど、コードの保守が容易になります。

stopPropagation()

ただし、イベントのバブリングを停止する必要がある状況もあります。次の例を見てみましょう:

コードをコピーコードは次のとおりです。


通常のテキストと、その後に link< / a> に続いてテキストを追加します (たとえば、背景の変更など)。ただし、ユーザーのリンクをクリックする動作には影響しません (ユーザビリティの観点からは、この例はあまり良くありません。何も起こらないようにしたいかもしれません)。ユーザーが他の場所をクリックしたとき)。



コードをコピー
コードは次のとおりです:$("div.post")。 click(function () { // 最初のことを行います;
$("div.post a").click(function (e) {
//ブラウザのデフォルトのアクションをキャンセルしないでください。
// このイベントをバブルさせないでください。


この場合、 return false を指定すると、div の click イベントは発生しませんが、ユーザーはクリックしたリンクに到達しません。



stopImmediatePropagation()

このメソッドは、他の処理関数が現在のオブジェクトにバインドされている場合でも、オブジェクトにバインドされているすべてのイベントがバインド順序で実行されるようにします。

コードをコピー


コードは次のとおりです:


$("div a").click(function () {
// 何かを実行します
}); (e) {
// 他の処理を実行します
e.stopImmediatePropagation();
});

$("div a").click(function () {
// これは決して起動しません
});

$("div").click(function () {
// これは決して起動しません


この例はぎこちないと思われるかもしれませんが、コードが非常に複雑な場合、別のウィジェットやプラグインが同じオブジェクトにイベントを追加することがあります。このような状況が発生した場合は、それが必要になります。 stopImmediatePropagation を理解して使用してください。

false を返す

preventDefault と stopPropagation を同時に必要とし、コールバックの実行が完了するまで停止しないというブラウザのデフォルト動作をコードが受け入れることができる場合にのみ、「return false」を使用できます。ただし、他の jQuery 開発者向けに作成されたデモ コードではこのメソッドを使用しないことを強くお勧めします。誤用が増える可能性があるためです。また、「return false」は絶対に必要であると確信できる場合にのみ使用してください。

適切な場所を選択してください

「return false」を使用すると、コールバック関数の実行後にブラウザのデフォルトの動作がキャンセルされるだけですが、e.preventDefault を使用すると、より多くのオプションがあり、いつでもブラウザを停止できます。関数内のどこに配置するか。

1. 開発段階では、

を常に最初の行に置く必要があります。フォームを Ajax 送信に変更するためにデバッグしているときに、フォームがすでに古い方法に従って送信されているということは、最も避けたいことかもしれません。

2. 製品ステージ、プログレッシブ エンハンスメントを使用する場合は、コールバックの最後に配置するか、通常のページでプログレッシブ エンハンスメントを使用する場合は論理エンド ポイントに配置する必要があります。ブラウザが JS をサポートしていない (または無効になっている) 場合に、リンクのクリック イベントとフォームの送信イベントをサーバー側で処理する方法を検討してください。ここでの利点は、JS をオフにする場合は考慮せず、コールバック コードでエラーが発生して例外がスローされる場合のみを考慮していることです。


コードをコピーします

コードは次のとおりです:var data = {}; click(function (e ) { e.preventDefault(); // デフォルトの動作をキャンセル
// `my` が未定義であるためエラーをスローします
$("body").append(data.my .link);
// 元のリンクは機能せず、「クールな」
// ユーザーには何も残りません。


さて、同じイベントと、preventDefault 呼び出しを一番下に配置した場合の効果を見てみましょう:



コードをコピーします

コードは次のとおりです。> var data = {}; $("a").click(function (e) { // `my` が未定義のためエラー
$ ("body").append(data.my.link);

// この行に到達しないため、Web サイトはフォールバックします
//これの代わりに `href` を使用します。
// 「クールな」壊れた JavaScript!
e.preventDefault(); // デフォルトの動作をキャンセルします


Thisコードが常に適切に動作することを期待しないでください。コードが間違っていないことを前提とするよりも、エラーが発生したときに適切に応答する方が良いでしょう。


3. プロダクト段階では、
関数が JS で設計されている場合は、最初の行に配置する必要があります。
関数の最初の行である必要はありませんが、ここでの原則は、関数の関数が JS を通じて実装されている場合 (サーバー側の対話を必要としない)、この場合、互換性を考慮する必要はありません。これを最初の行に追加すると、URL に # 文字が表示されなくなりますが、ユーザーが混乱しないように、できる限り多くのエラー処理コードを追加する必要があります。エラーが発生したとき。

結論

ブラウザがデフォルトの動作を実行しないようにする必要がある場合に、この記事が正しい選択をするのに十分な情報を伝えてくれれば幸いです。 「return false」は、自分が何をしようとしているのかを本当に理解している場合にのみ使用し、関数内の正しい場所で対応するコードを呼び出していることを確認してください。最後に、コードを可能な限り柔軟にして、「return false」を再度使用しないようにしてください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語のreturnの使い方を詳しく解説 C言語のreturnの使い方を詳しく解説 Oct 07, 2023 am 10:58 AM

C 言語における return の使い方は、 1. 戻り値の型が void の関数については、return 文を使用して関数の実行を早期に終了することができます; 2. 戻り値の型が void ではない関数については、 return ステートメントは、関数の実行を終了するためのものです。結果は呼び出し元に返されます。 3. 関数の実行を早期に終了します。関数内で return ステートメントを使用して、関数の実行を早期に終了することもできます。関数が値を返さない場合。

Javaのreturn文とfinally文の実行順序は何ですか? Javaのreturn文とfinally文の実行順序は何ですか? Apr 25, 2023 pm 07:55 PM

ソースコード: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか May 12, 2023 pm 06:34 PM

Vue3.2 セットアップ構文シュガーは、単一ファイル コンポーネント (SFC) で結合された API を使用して、Vue3.0 の面倒なセットアップを解決するコンパイル時構文シュガーです。宣言された変数、関数、インポートによって導入されたコンテンツは、インポートによって公開されます。使用上の問題点 1. 宣言した変数、関数、import で導入した内容を使用中に return する必要はなく、糖衣構文を使用することができます。 // 導入した内容をインポート import{getToday }from'./utils'//variable constmsg='Hello !'//function func

JavaScript で return キーワードを使用する JavaScript で return キーワードを使用する Feb 18, 2024 pm 12:45 PM

JavaScript での return の使用には特定のコード例が必要です。 JavaScript では、return ステートメントを使用して関数から返される値を指定します。関数の実行を終了するために使用できるだけでなく、関数が呼び出された場所に値を返すこともできます。 return ステートメントには次の一般的な用途があります。 値を返す return ステートメントは、関数が呼び出された場所に値を返すために使用できます。簡単な例を次に示します。 functionadd(a,b){

JavaScript関数の戻り値とreturn文の詳しい解説 JavaScript関数の戻り値とreturn文の詳しい解説 Aug 04, 2022 am 09:46 AM

JavaScript 関数は、外部と対話するための 2 つのインターフェースを提供し、パラメータは外部情報を受け取る入り口として機能し、戻り値は演算結果を外部にフィードバックする出口として機能します。次の記事では、JavaScript 関数の戻り値を理解し、return ステートメントの使用法を簡単に分析します。

JavaScriptでのreturn文の使い方 JavaScriptでのreturn文の使い方 Feb 26, 2024 am 09:21 AM

JavaScript で return を使用する方法には、具体的なコード例が必要です。JavaScript では、return は非常に重要なキーワードです。通常、関数の値を返すか、関数の実行を終了するために使用されます。 return ステートメントは、関数の呼び出し元に値を返し、関数の実行を終了するために使用されます。 return ステートメントは関数内のどこでも使用でき、数値、文字列、ブール値などの任意の JavaScript データ型を返すことができます。

Pythonで戻り値を使う方法 Pythonで戻り値を使う方法 Oct 07, 2023 am 11:10 AM

Python の戻り値 return の使い方は、関数が return ステートメントを実行すると、実行が直ちに停止され、関数が呼び出された場所に指定された値が返されます。詳細な使用法: 1. 単一の値を返す; 2. 複数の値を返す; 3. null 値を返す; 4. 関数の実行を早期に終了する。

SpringBoot インターセプターは false を返し、クロスドメインの問題を解決する方法を示します SpringBoot インターセプターは false を返し、クロスドメインの問題を解決する方法を示します May 13, 2023 pm 05:10 PM

このプロジェクトは最近、IP ブラックとホワイト リストの機能を追加しました。IP フィルタリング インターセプタが false を返すと、フロント エンドがクロスドメインを表示することがわかりました。MVC 構成クラスを変更しようとした後、まだ機能しないことがわかりました。最後に、インターセプター @OverridepublicbooleanpreHandle に判定を追加しました。(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsIOException{//----------これを追加するだけです----------if (!(ハンドラーインスタンス

See all articles