您好,登錄后才能下訂單哦!
這篇“jQuery中的事件實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“jQuery中的事件實例分析”文章吧。
當用戶與瀏覽器進行交互時這些方法被用于注冊行為生效,并進一步處理這些注冊行為。
在選定的元素上綁定一個或多個事件處理函數。
on( events [, selector ] [, data ], handler(eventObject) )
Example1: 當點擊段落時,顯示該段落中的文本:
$("p").on("click", function(){ alert( $(this).text() ); });
Example2: 向事件處理函數中傳入數據,并且在事件處理函數中通過名字來獲取傳入的數據:
function myHandler(event) { alert(event.data.foo); } $("p").on("click", {foo: "bar"}, myHandler)
Example3: 取消表單的提交動作,并且通過返回 false 的方法來防止事件冒泡:
$("form").on("submit", false)
Example4: 通過使用 .preventDefault(),僅取消默認的動作。
$("form").on("submit", function(event) { event.preventDefault(); });
Example5: 通過使用 .stopPropagation(),防止提交事件的冒泡行為,但是并不禁止提交行為。
$("form").on("submit", function(event) { event.stopPropagation(); });
Example6: 添加并觸發自定義事件(非瀏覽器事件)。
$("p").on("myCustomEvent",function(event,myName){ $(this).text(myName+",hithere!"); $("span") .stop() .css("opacity",1) .text("myName="+myName) .fadeIn(30) .fadeOut(1000); }); $("button").click(function(){ $("p").trigger("myCustomEvent",["John"]); });
Example7: 使用 對象 同時添加多個事件處
$("div.test").on({ click: function(){ $(this).toggleClass("active"); }, mouseenter: function(){ $(this).addClass("inside"); }, mouseleave: function(){ $(this).removeClass("inside"); } });
為元素的事件添加處理函數。處理函數在每個元素上每種事件類型最多執行一次。
.one( events [, data ], handler(eventObject) )
.one( events [, selector ] [, data ], handler(eventObject) )
Example1: 為每個 div 綁定一次性 click 事件。
var n = 0; $( "div" ).one( "click", function() { var index = $( "div" ).index( this ); $( this ).css({ borderStyle: "inset", cursor: "auto" }); $( "p" ).text( "Div at index #" + index + " clicked." + " That's " + (++n) + " total clicks." ); });
Example2: 在每個段落上第一次點擊時,顯示該段落的內容:
$( "p" ).one( "click", function() { alert( $( this ).text() ); });
Example3: 處理函數在每個元素上每種事件類型只執行一次。
var n = 0; $(".target").one("click mouseenter", function() { $(".count").html(++n); });
移除一個事件處理函數。
.off( events [, selector ] [, handler(eventObject) ] )
Example1: 為有顏色的按鈕添加并移除事件處理。
function flash() { $( "div" ).show().fadeOut( "slow" ); } $( "#bind" ).click(function() { $( "body" ) .on( "click", "#theone", flash ) .find( "#theone" ) .text( "Can Click!" ); }); $( "#unbind" ).click(function() { $( "body" ) .off( "click", "#theone", flash ) .find( "#theone" ) .text( "Does nothing..." ); });
Example2: 移除所有段落上的事件:
$( "p" ).off();
Example3: 移除所有段落上的代理事件:
$( "p" ).off( "click", "**" );
Example4: 通過傳入的第三個參數,僅移除先前綁定的事件處理函數:
var foo = function() { // Code to handle some kind of event }; // ... Now foo will be called when paragraphs are clicked ... $( "body" ).on( "click", "p", foo ); // ... Foo will no longer be called. $( "body" ).off( "click", "p", foo );
Example5: 通過指定名字空間,解除綁定表單上所有的代理事件:
var validate = function() { // Code to validate form entries }; // Delegate events under the ".validator" namespace $( "form" ).on( "click.validator", "button", validate ); $( "form" ).on( "keypress.validator", "input[type='text']", validate ); // Remove event handlers in the ".validator" namespace $( "form" ).off( ".validator" );
觸發被選元素的指定事件類型。
.trigger( eventType [, extraParameters ] )
Example1: 點擊 button #2 時,同時觸發 button #1 的點擊事件。
$( "button" ).first().click(function() { update( $( "span" ).first() ); }); $( "button" ).last().click(function() { $( "button" ).first().trigger( "click" ); update( $( "span" ).last() ); }); function update( j ) { var n = parseInt( j.text(), 10 ); j.text( n + 1 ); }
Example2: 若要提交第一個表單但又不想使用 submit() 函數,請嘗試如下方法:
$("form:first").trigger("submit")
Example3: 若要提交第一個表單但又不想使用 submit() 函數,請嘗試如下方法:
var event = jQuery.Event( "submit" ); $( "form" ).first().trigger( event ); if ( event.isDefaultPrevented() ) { // Perform an action... }
Example4: 向事件中傳入任意的數據:
$( "p" ) .click(function( event, a, b ) { // When a normal click fires, a and b are undefined // for a trigger like below a refers to "foo" and b refers to "bar" }) .trigger( "click", [ "foo", "bar" ] );
Example5: 通過 event 對象,向事件中傳入任意的數據:
var event = jQuery.Event( "logged" ); event.user = "foo"; event.pass = "bar"; $( "body" ).trigger( event );
Example6: 另外一種通過 event 對象傳入數據的方法:
$( "body" ).trigger({ type:"logged", user:"foo", pass:"bar" });
一個事件執行附加到元素的所有處理程序。
.triggerHandler( eventType [, extraParameters ] )
如果您使用 .triggerHandler() 觸發 focus 事件,那么它只會觸發綁定了該事件的處理函數,而瀏覽器的默認 focus 動作是不會被觸發的。
$( "#old" ).click(function() { $( "input" ).trigger( "focus" ); }); $( "#new" ).click(function() { $( "input" ).triggerHandler( "focus" ); }); $( "input" ).focus(function() { $( "Focused!" ).appendTo( "body" ).fadeOut( 1000 ); });
接受一個函數,然后返回一個新函數,并且這個新函數始終保持了特定的上下文語境。
jQuery.proxy( function, context [, additionalArguments ] )
jQuery.proxy( context, name [, additionalArguments ] )
Example1: 修改使用參數為"function, context"的jQuery.proxy()方法綁定的點擊事件的上下文語境。并且在第一次點擊事件執行后,解除原先的綁定。
var me = { type: "zombie", test: function( event ) { // Without proxy, `this` would refer to the event target // use event.target to reference that element. var element = event.target; $( element ).css( "background-color", "red" ); // With proxy, `this` refers to the me object encapsulating // this function. $( "#log" ).append( "Hello " + this.type + " " ); $( "#test" ).off( "click", this.test ); } }; var you = { type: "person", test: function( event ) { $( "#log" ).append( this.type + " " ); } }; // Execute you.test() in the context of the `you` object // no matter where it is called // i.e. the `this` keyword will refer to `you` var youClick = $.proxy( you.test, you ); // attach click handlers to #test $( "#test" ) // this === "zombie"; handler unbound after first click .on( "click", $.proxy( me.test, me ) ) // this === "person" .on( "click", youClick ) // this === "zombie" .on( "click", $.proxy( you.test, me ) ) // this === "element" .on( "click", you.test );
Example2: 通過調用參數為"context, function name"的jQuery.proxy()方法,強制修改函數的上下文語境。 并且在第一次點擊事件執行后,解除綁定。
var obj = { name: "John", test: function() { $( "#log" ).append( this.name ); $( "#test" ).off( "click", obj.test ); } }; $( "#test" ).on( "click", jQuery.proxy( obj, "test" ) );
Example3: 更改綁定點擊處理程序函數的上下文。
var me = { // I'm a dog type: "dog", // Note that event comes *after* one and two test: function( one, two, event ) { $( "#log" ) // `one` maps to `you`, the 1st additional // argument in the $.proxy function call .append( "Hello " + one.type + ":")// The `this` keyword refers to `me` // (the 2nd, context, argument of $.proxy) .append( "I am a " + this.type + ", " ) // `two` maps to `they`, the 2nd additional // argument in the $.proxy function call .append( "and they are " + two.type + "." ) // The event type is "click" .append( "Thanks for " + event.type + "ing." ) // The clicked element is `event.target`, // and its type is "button" .append( "the " + event.target.type + "." ); } }; var you = { type: "cat" }; var they = { type: "fish" }; // Set up handler to execute me.test() in the context // of `me`, with `you` and `they` as additional arguments var proxy = $.proxy( me.test, me, you, they ); $( "#test" ) .on( "click", proxy );
為 JavaScript 的 "resize" 事件綁定一個處理函數,或者觸發元素上的該事件。
.resize( [eventData ], handler(eventObject) )
當窗口大小改變時(或改變后),查看窗口的寬度:
$(window).resize(function() { $('body').prepend('' + $(window).width() + ''); });
為 JavaScript 的 "scroll" 事件綁定一個處理函數,或者觸發元素上的該事件。
.scroll( [eventData ], handler(eventObject) )
在頁面滾動時觸發一系列動作:
$("p").clone().appendTo(document.body); $("p").clone().appendTo(document.body); $("p").clone().appendTo(document.body); $(window).scroll(function () { $("span").css("display", "inline").fadeOut("slow"); });
返回: jQuery:當DOM準備就緒時,指定一個函數來執行。
可以在同一個頁面中無限次地使用$(document).ready()事件。其中注冊的函數會按照(代碼中的)先后順序依次執行。
顯示當DOM加載的信息。
ready()
方法通常用于一個匿名函數:
$( document ).ready(function() { // Handler for .ready() called. });
代碼:
$(function() { $("p" ).text( "The DOM is now loaded and can be manipulated." ); });
暫停或恢復.ready() 事件的執行。
延遲就緒事件,直到已加載的插件。
$.holdReady( true ); $.getScript( "myplugin.js", function() { $.holdReady( false ); });
一個類似于promise的對象(或“thenable”),它在文檔準備好時解析。
ready()
, 它就是使用了這個對象。
Example1:使用jQuery.when監聽準備好的文檔。
$.when( $.ready ).then(function() { // Document is ready. });
Example2:典型的用法涉及到另一個promise,使用jQuery.when。
$.when( $.getJSON( "ajax/test.json" ), $.ready ).done(function( data ) { // Document is ready. // Value of test.json is passed as `data`. });
為 "blur" 事件綁定一個處理函數,或者觸發元素上的 "blur" 事件(注:此事件不支持冒泡)。
為JavaScript 的 "change" 事件綁定一個處理函數,或者觸發元素上的 "change" 事件。
Example1: 為 select 元素添加 change 事件,將選中的項目顯示在 div 中。
$("select").change(function () { var str = ""; $("select option:selected").each(function () { str += $(this).text() + " "; }); $("div").text(str); }) .change();
Example2: 所有文本輸入元素添加一個的有效性測試:
$("input[type='text']").change( function() { // check input ($(this).val()) for validity here });
.focus():為 JavaScript 的 "focus" 事件綁定一個處理函數,或者觸發元素上的 "focus" 事件。
.focusin():將一個事件函數綁定到"focusin" 事件。
.focusout():將一個事件函數綁定到"focusout" 事件。
.select():為 JavaScript 的 "select" 事件綁定一個處理函數,或者觸發元素上的該事件。
.submit():為 JavaScript 的 "submit" 事件綁定一個處理函數,或者觸發元素上的該事件。
.submit( [eventData ], handler(eventObject) )
Example1: 如果你想根據一個標識來阻止表單被提交的話,可以像下面這樣做:
$("form").submit(function() { if ($("input:first").val() == "correct") { $("span").text("Validated...").show(); return true; } $("span").text("Not valid!").show().fadeOut(1000); return false; });
Example2: 如果你想根據一個標識來阻止表單被提交的話,可以像下面這樣做:
$("form").submit( function () { return this.some_flag_variable; } );
Example3: 觸發頁面上第一個表單的提交事件:
$("form:first").submit();
.keydown():為 "keydown" 事件綁定一個處理函數,或者觸發元素上的 "keydown" 事件。
.keypress():為 "keypress" 事件綁定一個處理函數,或者觸發元素上的 "keypress" 事件。
.keyup():為 "keyup" 事件綁定一個處理函數,或者觸發元素上的 "keyup" 事件。
.keyup( [eventData ], handler(eventObject) )
當在文本框中松開一個按鍵時,顯示 keyup 事件的 event 對象。(使用一個簡單的 $.print 插件)。
var xTriggered = 0; $('#target').keyup(function(event) { xTriggered++; var msg = 'Handler for .keyup() called ' + xTriggered + ' time(s).'; $.print(msg, 'html'); $.print(event); }).keydown(function(event) { if (event.which == 13) { event.preventDefault(); } }); $('#other').click(function() { $('#target').keyup(); });
為 JavaScript 的"click" 事件綁定一個處理器,或者觸發元素上的 "click" 事件。
.click( [eventData ], handler(eventObject) )
Example1: 點擊段落時隱藏他們:
$("p").click(function () { $(this).slideUp(); });
Example2: 在頁面上所有段落上觸發click事件。
$("p").click();
.contextmenu():為 JavaScript 的"contextmenu" 事件綁定一個處理器,或者觸發元素上的 "contextmenu" 事件。
.dblclick():為JavaScript 的 "dblclick" 事件綁定一個處理函數,或者觸發元素上的 "dblclick" 事件。
.hover():將二個事件函數綁定到匹配元素上,分別當鼠標指針進入和離開元素時被執行。將一個單獨事件函數綁定到匹配元素上,分別當鼠標指針進入和離開元素時被執行。
.mousedown():為 JavaScript 的 "mousedown" 事件綁定一個處理函數,或者觸發元素上的該事件。
.mouseenter():為 mouse enters(鼠標進入) 事件綁定一個處理函數,或者觸發元素上的 mouse enters(鼠標進入) 事件。
.mouseleave():為 mouse leaves(鼠標離開) 事件綁定一個處理函數,或者觸發元素上的 mouse leaves(鼠標離開) 事件。
.mousemove():為 JavaScript 的 "mousemove" 事件綁定一個處理函數,或者觸發元素上的該事件。
.mouseout():為 JavaScript 的 "mouseout" 事件綁定一個處理函數,或者觸發元素上的該事件。(注:支持事件冒泡)
.mouseover():為 JavaScript 的 "mouseover" 事件綁定一個處理函數,或者觸發元素上的該事件。(注:支持事件冒泡)
.mouseup():為 JavaScript 的 "mouseup" 事件綁定一個處理函數,或者觸發元素上的該事件。
metaKey:表示事件觸發時哪個Meta鍵被按下。
pageX、pageY:鼠標相對于文檔的左邊緣、頂部邊緣的位置(坐標)。
relatedTarget:在事件中涉及的其它任何DOM元素。
target:觸發事件的DOM元素。
which:針對鍵盤和鼠標事件,這個屬性能確定你到底按的是哪個鍵。
type:描述事件的性質。
currentTarget:在事件冒泡過程中的當前DOM元素。
data:當當前正在執行的處理程序綁定時,一個可選的數據對象傳遞給一個事件方法。
delegateTarget:綁定了當前正在調用jQuery 事件處理器的元素。
namespace:當事件被觸發時此屬性包含指定的命名空間。
result:事件被觸發的一個事件處理程序的最后返回值,除非值是 undefined。
timeStamp:這個屬性返回事件觸發時距離1970年1月1日的毫秒數。
某些事件可能有它們特定的屬性。 那些屬性可以存取在event.originalEvent對象上。
// add the dataTransfer property for use with the native `drop` event // to capture information about files dropped into the browser window jQuery.event.props.push( "dataTransfer" );
event.isDefaultPrevented():根據事件對象中是否調用過 event.preventDefault() 方法,來返回一個布爾值。
event.isImmediatePropagationStopped():根據事件對象中是否調用過 event.stopImmediatePropagation() 方法,來返回一個布爾值。
event.isPropagationStopped():根據事件對象中是否調用過 event.stopPropagation() 方法,來返回一個布爾值。
event.preventDefault():如果調用這個方法,默認事件行為將不再觸發。
event.stopImmediatePropagation():阻止剩余的事件處理函數執行并且防止事件冒泡到DOM樹上。
event.stopPropagation():防止事件冒泡到DOM樹上,也就是不觸發的任何前輩元素上的事件處理函數。
記錄按鍵:
$('#whichkey').bind('keydown',function(e){ $('#log').html(e.type + ': ' + e.which ); });
以上就是關于“jQuery中的事件實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。