ホームページ >ウェブフロントエンド >jsチュートリアル >JQueryのイベントの包括的な見方
この記事は、Wern AnchetaとCamilo Reyesによってレビューされました。 SetePointのすべてのピアレビューアーズに感謝します。
jQueryは、Webページでほぼすべてのユーザーインタラクション動作をキャプチャし、イベントとして定義することができます。イベントの重要性は、ユーザーのアクションに基づいてそれに応じて応答できることです。たとえば、ボタンクリックまたはスクロールイベントに基づいて、Webページの背景色を変更するコードを記述できます。
jQueryには、さまざまなイベントを処理するためのcontextmenu()
、hover()
、keyup()
などの多くの簡単な方法があります。専用の方法に加えて、jQueryは、ハンドラーをあらゆるイベントに添付できる一般的なon
メソッドも提供します:on('eventName', handler)
。これらの方法は、純粋なJavaScriptでハンドラーを追加できる標準DOMイベントのラッパーにすぎません。
このチュートリアルでは、これらすべてのイベントメソッド(5つの主要なカテゴリに分割されています)をすばやく見て、それらを使用する際のベストプラクティスについて説明します。
.on()
などの方法を使用します。 .on('eventName', handler)'
keydown()
、keyup()
など、さまざまな相互作用を処理します。 click()
mousemove()
フォームイベントは、フォーム内のユーザー入力とインタラクションを処理します。JQueryは、フォーカス、変更、および提出物を効果的に管理するための専用イベントを提供します。
要素は、ユーザーが特定の要素の異なる位置にスクロールするときにこのイベントをトリガーできます。 スクロール位置が変更されるたびにハンドラーが呼び出されることを忘れないでください。巻物の原因は関係ありません。矢印キーを押したり、スクロールバーをクリックまたはドラッグしたり、マウスホイールを使用したりすることでトリガーできます。以下のコードでは、ユーザーが500ピクセル以上下にスクロールして操作を実行するかどうかを確認します。 error
resize
eventscroll
error
このイベントは、ブラウザウィンドウのサイズが変更されるたびにトリガーされます。さまざまなブラウザは、実装方法に従って異なる方法でon('error', handler)
ハンドラーを呼び出すことができます。 Internet ExplorerとWebKitベースのブラウザは、
。 resize
次のコードスニペットは、ウィンドウの幅に基づいて画像を交換しますresize
resize
このCodepenデモンストレーションは、イベントの実際の効果を示しています:src
codepen demo <code class="language-javascript">$(window).resize(function() {
var windowWidth = $(window).width();
if (windowWidth < 768) {
$("img").attr("src", "image-src-here.jpg");
// 此处更改图像src。
}
});</code>
を表示しますscroll
eventwindow
オブジェクトを除き、スクロールバーを備えた要素はこのイベントをトリガーできます。たとえば、overflow
属性をscroll
またはスクロール可能なiframeに設定する要素は、このイベントをトリガーできます。 <code class="language-javascript">$(window).resize(function() {
var windowWidth = $(window).width();
if (windowWidth < 768) {
$("img").attr("src", "image-src-here.jpg");
// 此处更改图像src。
}
});</code>
を表示します ドキュメント読み込みイベント
、load
です。 unload
ready
オブジェクトなどの外部リソースをロードする要素にハンドラーを接続できます。イベントは、接続する要素とそのすべての子供の要素が完全にロードされると発射されます。画像で使用すると、いくつかの問題が発生します。まず、DOMツリーを正しく泡立てません。 2番目の問題は、信頼性でもクロスブラウザーでもないことです。 load()
window
ユーザーがWebナビゲーションから離れると、
を使用してもunload
イベントはキャンセルされないことに注意してください。さらに、ほとんどのブラウザは、このイベントハンドラー内のpreventDefault()
、unload
、およびalert()
への呼び出しを無視します。つまり、次のコードが機能しないことを意味します。
confirm()
prompt()
バージョン1.8以降、
<code class="language-javascript">$(window).scroll(function() { if ($(window).scrollTop() >= 500) { $("#alert").text("您已经滚动足够了!"); // 更新警报框内的文本。 } });</code>の両方が非推奨されています。
load()
unload()
event
ready
イベントはあなたのためにこれを処理します。このイベントに添付されたハンドラーは、DOMの準備ができた後にのみ実行されます。ハンドラーの内部では、jQueryコードを実行したり、イベントハンドラーを他の要素に添付したりできます。 下のCodepenデモでは、高解像度画像をロードします。画像が完全にロードされる前にDOMの準備ができていることに気付くでしょう。 ready
codepen demo
を表示します コードがいくつかのCSSスタイルのプロパティの値に依存している場合は、最初に実行する前に対応するスタイルシートまたは組み込みスタイルへの参照を提供する必要があります。
、keydown()
、keyup()
には3つのキーボードイベントショートカットがあります。 keypress()
keyup
イベントkeydown
名前が示唆するように、ユーザーがキーボードのキーをリリースすると、
keyup
イベントオブジェクトのkeydown
属性を使用して、どのキーが押されているかを決定することをお勧めします。これは、ブラウザがこの情報を保存するために異なるプロパティを使用し、jQueryが
which
覚えておくべきもう一つのことは、2つのイベントがwhich
と
および<kbd>a</kbd>
は個別に登録されています。以下のコードでは、ユーザーに<kbd>shift a</kbd>
イベントを登録するアラートボックスを表示します。 <kbd>shift</kbd>
キーが押されると、特定の要素がDOMから削除されます。 <kbd>a</kbd>
keydown
<kbd>y</kbd>
<code class="language-javascript">$(window).resize(function() { var windowWidth = $(window).width(); if (windowWidth < 768) { $("img").attr("src", "image-src-here.jpg"); // 此处更改图像src。 } });</code>
keypress
イベントに似ています。主な違いの1つは、修飾子と非プリントキー(などなど)がkeydown
イベントをトリガーしないことです。特別なキー(矢印キーなど)をキャプチャするために<kbd>Shift</kbd>
イベントを使用してはいけないと言うとき、あまり置くことはできません。入力したキャラクター(aやaなど)を知りたい場合は、<kbd>Esc</kbd>
を使用する必要があります。 keypress
keypress
次のコードスニペットは、キーを押したキーに基づいて要素を隠します。
keypress
codepen demo
<code class="language-javascript">$(window).scroll(function() { if ($(window).scrollTop() >= 500) { $("#alert").text("您已经滚动足够了!"); // 更新警报框内的文本。 } });</code>を表示します
マウスイベント マウスイベントは、ユーザーがポインティングデバイス(マウスなど)と対話するとトリガーされます。これらのイベントは、クリック(
、、click
、dblclick
など)に基づいています。このセクションでは、これらすべてのイベントについて簡単に説明し、それらの間のわずかな違いを説明するためのいくつかのデモンストレーションを含めます。 contextmenu
mouseenter
クリックベースのイベントmouseleave
mousemove
jQueryは、5つのクリックベースのイベントメソッドを定義します。ユーザーが要素のマウスボタンをそれぞれ押してリリースすると、
dblclick
わずかに複雑です。イベントをdblclick
として登録するには、システム関連のカウント間隔が期限切れになる前に2回のマウスクリックが必要です。ダブルクリックによってトリガーされたイベントはブラウザ固有であるため、ハンドラーを単一の要素の両方のclick
とdblclick
の両方に添付しないでください。一部のブラウザは、ダブルクリックする前に2つのシングルクリックイベントを登録する場合がありますが、他のブラウザはダブルクリックする前に1つのシングルクリックイベントのみを登録する場合があります。
contextmenu
イベントは、要素を右クリックした後、コンテキストメニューが表示される前にトリガーされます。つまり、イベントハンドラーで対応するコードを使用して、デフォルトのコンテキストメニューが表示されないようにすることができます。
次のコードスニペットにより、デフォルトのコンテキストメニューが右クリック時に表示されないようにしますが、代わりにカスタムメニューが表示されます。
<code class="language-javascript">$(window).resize(function() { var windowWidth = $(window).width(); if (windowWidth < 768) { $("img").attr("src", "image-src-here.jpg"); // 此处更改图像src。 } });</code>このデモは、画像をクリックするときに画像にCSSスタイルを適用し、カスタムコンテキストメニューを持っています。 codepen demo
を表示します モバイルベースのイベント
イベントから始めましょう。名前が示すように、マウスポインターが要素に入ると、両方のイベントが発射されます。同様に、マウスポインターが要素を離れると、mouseover
およびmouseenter
イベントが発生します。 mouseleave
mouseout
の1つの違いは、マウスポインターがバインドする要素の外側に移動する場合にのみ、前者が発射されることです。一方、要素の子孫の外の動きでさえ、mouseleave
はトリガーされます。 mouseout
とmouseout
の間にはまったく同じ違いがあります。 mouseenter
mouseover
を表示します マウスの動きに基づいてイベントがどのように変化するかを見てみましょう
および。右から大きな青いボックスを入力してから停止してから右にピンク色の箱に入ります。 mouseenter
およびmouseover
は、両方とも1の値を持っている必要があります。左に移動してピンクのボックスを入力すると、mouseenter
カウントが2に変更されます。これは、mouseover
のイベントが泡立っているために起こります。ピンクのボックスのmouseover
イベントは、外側の青いボックスに「バブル」し、mouseover
イベントのカウントを1より増加させます。 mouseover
イベントは、さらに左に移動し、2つのピンク色のボックスの間を停止すると再び発砲します。ブルーボックスの左端に到達すると、mouseover
イベントのカウントは5で、mouseover
イベントのカウントはまだ1になります。 mouseover
mouseenter
まったく同じ推論を使用して、イベントのカウントを説明するために使用できます。さまざまな方向に移動してみて、カウントがどのように変化するかを確認してください。
mousemove
およびhover
イベントマウスポインターが要素内を移動すると、mousemove
イベントがトリガーされます。マウスが動いている限り、ピクセルと同じくらい小さくてもトリガーされます。したがって、非常に短い時間で何百ものイベントをトリガーできます。ご想像のとおり、イベントハンドラーで複雑な操作を実行すると、ブラウザが遅れます。 mousemove
イベントハンドラーを可能な限り効率的にし、不要になった場合はバインドすることをお勧めします。
hover
マウスポインターが要素に入るか出発する場合にのみ無料。 hover
メソッドを呼び出す方法は2つあります。最初のものは次のとおりです
<code class="language-javascript">$(window).resize(function() { var windowWidth = $(window).width(); if (windowWidth < 768) { $("img").attr("src", "image-src-here.jpg"); // 此处更改图像src。 } });</code>が実行されます。 2番目の方法は次のとおりです
handlerIn()
今回は、要素を入力して出発するときに同じhandlerOut()
関数が実行されます。
<code class="language-javascript">$(window).scroll(function() { if ($(window).scrollTop() >= 500) { $("#alert").text("您已经滚动足够了!"); // 更新警报框内的文本。 } });</code>
codepen demo handlerInOut
注:このデモでは、CSSフィルター効果を使用しますが、これはサポートしていません。 フォームイベント
フォームはインターネット上のどこにでもあります。ほぼすべてのユーザーが、ある時点でフォームに記入します。 jQueryには、フォームイベントを処理する特別な方法があります。これらのイベントは、値が変化したり、焦点を失ったりしたときに発射できます。合計7つのフォームイベントがあり、1つずつ説明します。
、、
、blur
eventsfocus
focusin
要素が焦点を獲得するたびに、focusout
イベントがトリガーされます。フォーム要素とアンカータグでのみ機能します。他の要素に焦点を合わせてトリガーするには、要素のイベントをトリガーする必要がある場合は、focus
メソッドを呼び出すことができます。 tabindex
focus
要素が焦点を失うたびに、triggerHandler("focus")
イベントがトリガーされます。古いブラウザでは、このイベントはフォーム要素にのみ適用されます。
blur
イベントとは異なり、要素またはその子孫が焦点を獲得するたびに
がトリガーされます。したがって、イベントをバブルアップしたい場合は、両方のイベントを使用する必要があります。 focus
focusin
focusout
、
select
change
要素の値が変更されると、submit
イベントがトリガーされます。このイベントは、、およびchange
要素にのみ適用されます。チェックボックス、ラジオボタン、および選択ボックスの場合、このイベントはユーザーが選択した直後にトリガーされます。他の要素では、要素が焦点を失った後にのみ発射されます。また、JavaScriptを使用して入力要素の値を変更した場合、このイベントはトリガーされないことに注意してください。 <input>
ユーザーが要素内でテキスト選択を行うと、select
イベントがトリガーされます。このイベントの範囲はより限られており、<input>
および<textarea></textarea>
要素にのみ適用できます。選択したテキストを取得する場合は、クロスブラウザーjQueryプラグインを使用する必要があります。
ユーザーがフォームを送信しようとすると、submit
イベントがトリガーされます。ハンドラーを添付してフォーム要素のみを添付できます。このイベントをトリガーするには、ユーザーは<button></button>
、<input type="submit">
、または<input type="image">
要素をクリックする必要があります。興味深いことに、javascriptsubmit
イベントはインターネットエクスプローラーで泡立ちません。ただし、この動作は、jQueryバージョン1.4以降、ブラウザで標準化されています。
、load
、error
メソッドは非推奨です。 unload
メソッドは本質的に不明です。この方法は、AJAXがロードまたは実際に発射されたイベントを意味する場合があります。同様に、load()
メソッドもload
メソッドと混同される場合があります。 JQuery 3では、これらの方法がついに削除されました。これで、これらのイベントリスナーを登録するには、error
メソッドを使用する必要があります。 jQuery.error()
on
最終的な考え
keypress
イベントの詳細については、公式のjQueryドキュメントにアクセスできます。 jqueryでイベントを使用することに関する質問やヒントがある場合は、コメントを残してください。 keydown
JQueryイベントのFAQ(FAQ)
jQueryのイベントを泡立たせないようにする方法は?
メソッドの違いは何ですか? event.stopPropagation()
イベントハンドラーを要素に接続するために、
<code class="language-javascript">$(window).resize(function() { var windowWidth = $(window).width(); if (windowWidth < 768) { $("img").attr("src", "image-src-here.jpg"); // 此处更改图像src。 } });</code>および
.bind()
はハンドラーを現在の要素にのみ取り付けるのに対し、.live()
はハンドラーを現在の要素と将来セレクターに一致させるすべての要素に取り付けることです。ただし、メソッドを使用する必要があります。 .bind()
.trigger()
メソッドを使用して、jQueryでプログラムでイベントをトリガーできます。この方法により、要素上の指定されたイベントを手動でトリガーできます。例は次のとおりです。
<code class="language-javascript">$(window).resize(function() { var windowWidth = $(window).width(); if (windowWidth < 768) { $("img").attr("src", "image-src-here.jpg"); // 此处更改图像src。 } });</code>
jQueryでのイベントのデフォルト操作をブロックする方法は?
event.preventDefault()
<code class="language-javascript">$(window).scroll(function() { if ($(window).scrollTop() >= 500) { $("#alert").text("您已经滚动足够了!"); // 更新警报框内的文本。 } });</code>jQueryの
.click()
の違いは何ですか? .on('click')
メソッドは、.click()
の略語です。どちらの方法で、選択した要素にクリックイベントハンドラーを添付します。ただし、動的に追加された要素のイベントを処理し、複数のイベントを一度に処理できるため、.on('click')
メソッドはより大きな柔軟性を提供します。 .on()
.dblclick()
<code class="language-javascript">$(window).unload(function() { alert("请不要离开!"); // 不起作用。 });</code>jQueryの要素に複数のイベントをバインドする方法は?
メソッドを使用して、jQueryの要素に複数のイベントをバインドできます。この方法を使用すると、選択した要素に複数のイベントハンドラーを添付できます。例は次のとおりです。.on()
<code class="language-javascript">$("#alert").keydown(function(event) { switch (event.which) { case 89: // y的键码 $("#element").remove(); // 从DOM中删除元素 break; } });</code>jQueryでイベントハンドラーをバインドする方法は?
.off()
を使用して接続されたイベントハンドラーを削除します。例は次のとおりです。.on()
<code class="language-javascript">$("body").keypress(function(event) { switch (event.keyCode) { case 75: // 75在keypress事件中代表大写K $(".K").css("display", "none"); break; } });</code>jQueryの右クリックイベントを検出する方法は?
mousedown
以上がJQueryのイベントの包括的な見方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。