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

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



コードをコピー
コードは次のとおりです:$("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 までご連絡ください。
JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール