真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

jquery事件,jQuery事件處理

jquery怎么事件委托

jQuery事件的綁定和委托可以用多種方法實(shí)現(xiàn),on() 、 bind() 、 live() 、 delegate() ,還有one()。

海勃灣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

有時(shí)我們可能會(huì)像下面這樣綁定一個(gè)事件:

復(fù)制代碼 代碼如下:

$("#div1").click(function() {

alert("點(diǎn)擊后觸發(fā)");

});

上面的事件綁定,我們可以通過(guò)多種方式去實(shí)現(xiàn):

1. on()

復(fù)制代碼 代碼如下:

//無(wú)數(shù)據(jù)參數(shù)

$("p").on("click", function(){

alert( $(this).text() );

});

//有數(shù)據(jù)參數(shù)

function myHandler(event) {

alert(event.data.foo);

}

$("p").on("click", {foo: "bar"}, myHandler)

與on()對(duì)應(yīng)的是off(),用來(lái)移除事件綁定:

復(fù)制代碼 代碼如下:

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);

off():移除on()進(jìn)行的綁定

one():只綁定一次。

2. bind()

參數(shù):

(type,[data],function(eventObject))

type: 含有一個(gè)或多個(gè)事件類型的字符串,由空格分隔多個(gè)事件。比如"click"或"submit",還可以是自定義事件名。

data:作為event.data屬性值傳遞給事件對(duì)象的額外數(shù)據(jù)對(duì)象

fn:綁定到每個(gè)匹配元素的事件上面的處理函數(shù)

(type,[data],false)

type:含有一個(gè)或多個(gè)事件類型的字符串,由空格分隔多個(gè)事件。比如"click"或"submit",還可以是自定義事件名。

data:作為event.data屬性值傳遞給事件對(duì)象的額外數(shù)據(jù)對(duì)象

false: 將第三個(gè)參數(shù)設(shè)置為false會(huì)使默認(rèn)的動(dòng)作失效。

同時(shí)綁定多個(gè)事件類型:

復(fù)制代碼 代碼如下:

$('#foo').bind('mouseenter mouseleave', function() {

$(this).toggleClass('entered');

});

同時(shí)綁定多個(gè)事件類型/處理程序:

復(fù)制代碼 代碼如下:

$("button").bind({

click:function(){$("p").slideToggle();},

mouseover:function(){$("body").css("background-color","red");},

mouseout:function(){$("body").css("background-color","#FFFFFF");}

});

你可以在事件處理之前傳遞一些附加的數(shù)據(jù)。

復(fù)制代碼 代碼如下:

function handler(event) {

alert(event.data.foo);

}

$("p").bind("click", {foo: "bar"}, handler)

通過(guò)返回false來(lái)取消默認(rèn)的行為并阻止事件起泡。

復(fù)制代碼 代碼如下:

$("form").bind("submit", function() { return false; })

bind存在的問(wèn)題

如果表格中要綁定單擊事件的有10列500行,那么查找和遍歷5000個(gè)單元格會(huì)導(dǎo)致腳本執(zhí)行速度明顯變慢,而保存5000個(gè)td元素和相應(yīng)的事件處理程序也會(huì)占用大量?jī)?nèi)存(類似于讓每個(gè)人親自站在門(mén)口等快遞)。

在前面這個(gè)例子的基礎(chǔ)上,如果我們想實(shí)現(xiàn)一個(gè)簡(jiǎn)單的相冊(cè)應(yīng)用,每頁(yè)只顯示50張照片的縮略圖(50個(gè)單元格),用戶點(diǎn)擊“第x頁(yè)”(或“下一頁(yè)”)鏈接可以通過(guò)Ajax從服務(wù)器動(dòng)態(tài)加載另外50張照片。在這種情況下,似乎使用.bind()方法為50個(gè)單元格綁定事件又可以接受了。

事實(shí)卻不然。使用.bind()方法只會(huì)給第一頁(yè)中的50個(gè)單元格綁定單擊事件,動(dòng)態(tài)加載的后續(xù)頁(yè)面中的單元格都不會(huì)有這個(gè)單擊事件。換句話說(shuō),.bind()只能給調(diào)用它的時(shí)候已經(jīng)存在的元素綁定事件,不能給未來(lái)新增的元素綁定事件(類似于新來(lái)的員工收不到快遞)。

事件委托可以解決上述兩個(gè)問(wèn)題。具體到代碼上,只要用jQuery 1.3新增的.live()方法代替.bind()方法即可:

復(fù)制代碼 代碼如下:

$("#info_table td").live("click",function(){/*顯示更多信息*/});

這里的.live()方法會(huì)把click事件綁定到$(document)對(duì)象(但這一點(diǎn)從代碼中體現(xiàn)不出來(lái),這也是.live()方法飽受詬病的一個(gè)重要原因,稍后再詳細(xì)討論),而且只需要給$(document)綁定一次(不是50次,更不是5000次),然后就能夠處理后續(xù)動(dòng)態(tài)加載的照片單元格的單擊事件。在接收到任何事件時(shí),$(document)對(duì)象都會(huì)檢查事件類型和事件目標(biāo),如果是click事件且事件目標(biāo)是td,那么就執(zhí)行委托給它的處理程序。

unbind():移除bind進(jìn)行的綁定。

3. live()

到目前為止,一切似乎很完美??上?,事實(shí)并非如此。因?yàn)?live()方法并不完美,它有如下幾個(gè)主要缺點(diǎn):

$()函數(shù)會(huì)找到當(dāng)前頁(yè)面中的所有td元素并創(chuàng)建jQuery對(duì)象,但在確認(rèn)事件目標(biāo)時(shí)卻不用這個(gè)td元素集合,而是使用選擇符表達(dá)式與event.target或其祖先元素進(jìn)行比較,因而生成這個(gè)jQuery對(duì)象會(huì)造成不必要的開(kāi)銷;

默認(rèn)把事件綁定到$(document)元素,如果DOM嵌套結(jié)構(gòu)很深,事件冒泡通過(guò)大量祖先元素會(huì)導(dǎo)致性能損失;

只能放在直接選擇的元素后面,不能在連綴的DOM遍歷方法后面使用,即$("#info_table td").live...可以,但$("#info_table").find("td").live...不行;

收集td元素并創(chuàng)建jQuery對(duì)象,但實(shí)際操作的卻是$(document)對(duì)象,令人費(fèi)解。

解決之道

為了避免生成不必要的jQuery對(duì)象,可以使用一種叫做“早委托”的hack,即在$(document).ready()方法外部調(diào)用.live():

復(fù)制代碼 代碼如下:

(function($){

$("#info_table td").live("click",function(){/*顯示更多信息*/});

})(jQuery);

在此,(function($){...})(jQuery)是一個(gè)“立即執(zhí)行的匿名函數(shù)”,構(gòu)成了一個(gè)閉包,可以防止命名沖突。在匿名函數(shù)內(nèi)部,$參數(shù)引用jQuery對(duì)象。這個(gè)匿名函數(shù)不會(huì)等到DOM就緒就會(huì)執(zhí)行。注意,使用這個(gè)hack時(shí),腳本必須是在頁(yè)面的head元素中鏈接和(或)執(zhí)行的。之所以選擇這個(gè)時(shí)機(jī),因?yàn)檫@時(shí)候剛好document元素可用,而整個(gè)DOM還遠(yuǎn)未生成;如果把腳本放在結(jié)束的body標(biāo)簽前面,就沒(méi)有意義了,因?yàn)槟菚r(shí)候DOM已經(jīng)完全可用了。

為了避免事件冒泡造成的性能損失,jQuery從1.4開(kāi)始支持在使用.live()方法時(shí)配合使用一個(gè)上下文參數(shù):

復(fù)制代碼 代碼如下:

$("td",$("#info_table")[0]).live("click",function(){/*顯示更多信息*/});

這樣,“受托方”就從默認(rèn)的$(document)變成了$("#info_table")[0],節(jié)省了冒泡的旅程。不過(guò),與.live()共同使用的上下文參數(shù)必須是一個(gè)單獨(dú)的DOM元素,所以這里指定上下文對(duì)象時(shí)使用的是$("#info_table")[0],即使用數(shù)組的索引操作符來(lái)取得的一個(gè)DOM元素。

4. delegate()

如前所述,為了突破單一.bind()方法的局限性,實(shí)現(xiàn)事件委托,jQuery 1.3引入了.live()方法。后來(lái),為解決“事件傳播鏈”過(guò)長(zhǎng)的問(wèn)題,jQuery 1.4又支持為.live()方法指定上下文對(duì)象。而為了解決無(wú)謂生成元素集合的問(wèn)題,jQuery 1.4.2干脆直接引入了一個(gè)新方法.delegate()。

使用.delegate(),前面的例子可以這樣寫(xiě):

復(fù)制代碼 代碼如下:

$("#info_table").delegate("td","click",function(){/*顯示更多信息*/});

使用.delegate()有如下優(yōu)點(diǎn)(或者說(shuō)解決了.live()方法的如下問(wèn)題):

直接將目標(biāo)元素選擇符("td")、事件("click")及處理程序與“受拖方”$("#info_table")綁定,不額外收集元素、事件傳播路徑縮短、語(yǔ)義明確;

支持在連綴的DOM遍歷方法后面調(diào)用,即支持$("table").find("#info").delegate...,支持精確控制;

可見(jiàn),.delegate()方法是一個(gè)相對(duì)完美的解決方案。但在DOM結(jié)構(gòu)簡(jiǎn)單的情況下,也可以使用.live()。

提示:使用事件委托時(shí),如果注冊(cè)到目標(biāo)元素上的其他事件處理程序使用.stopPropagation()阻止了事件傳播,那么事件委托就會(huì)失效。

undelegate(): 移除delegate的綁定

jquery 事件的方法怎么調(diào)用

jquery方法的調(diào)用? 和你自己寫(xiě)的js方法,然后調(diào)用時(shí)一樣的。

比如jquery 點(diǎn)擊事件 $('#XX').click();

你把要執(zhí)行的東西放到一個(gè)function進(jìn)去。傳進(jìn)click方法就可以。就想下面:

$('#XX').click(function(){

alert('jquery的點(diǎn)擊事件觸發(fā)了');

});

記得用jquery時(shí),得引入jquery的js文件。

jquery綁定事件的方法

1、新建一個(gè)靜態(tài)頁(yè)面bind.html,并引入jquery核心文件。

2、在body/body標(biāo)簽中,插入一個(gè)button按鈕,添加id屬性值。

3、在script/script標(biāo)簽中,添加按鈕點(diǎn)擊事件,利用on()方法綁定。

4、保存代碼并運(yùn)行項(xiàng)目,打開(kāi)瀏覽器查看界面效果,點(diǎn)擊按鈕查看控制臺(tái)。

5、將on()方法改為bind()方法,然后保存代碼,點(diǎn)擊按鈕查看打印結(jié)果。

6、在jQuery3.0以下版本中,可以使用delegate()方法綁定點(diǎn)擊事件。

7、除了上述之外,還有l(wèi)ive()方法,不過(guò)這個(gè)方法jQuery1.7后就被廢棄了。

jquery綁定點(diǎn)擊事件的方法

jQuery綁定點(diǎn)擊事件可以使用其綁定事件函數(shù)

jquery中四個(gè)事件綁定方式(bind,live,delegate,on)

1、bind()????

簡(jiǎn)要描述

bind()向匹配元素添加一個(gè)或多個(gè)事件處理器。

使用方式

$(selector).bind(event,data,function)

event:必需項(xiàng);添加到元素的一個(gè)或多個(gè)事件,例如 click,dblclick等;

單事件處理:例如?$(selector).bind("click",data,function);

多事件處理:

1.利用空格分隔多事件,例如?$(selector).bind("click dbclick mouseout",data,function);

2.利用大括號(hào)靈活定義多事件,例如?$(selector).bind({event1:function, event2:function, ...}) 

3.空格相隔方式:綁定較為死板,不能給事件單獨(dú)綁定函數(shù),適合處理多個(gè)事件調(diào)用同一函數(shù)情況;

大括號(hào)替代方式:綁定較為靈活,可以給事件單獨(dú)

綁定函數(shù); 

data:可選;需要傳遞的參數(shù);

function:必需;當(dāng)綁定事件發(fā)生時(shí),需要執(zhí)行的函數(shù);

適用Jquery版本

適用所有版本,但是根據(jù)官網(wǎng)解釋,自從jquery1.7版本以后bind()函數(shù)推薦用on()來(lái)代替。

2、live()? ?

簡(jiǎn)要描述

live()?向當(dāng)前或未來(lái)的匹配元素添加一個(gè)或多個(gè)事件處理器;

使用方式

$(selector).live(event,data,function)

event:必需項(xiàng);添加到元素的一個(gè)或多個(gè)事件,例如 click,dblclick等;

單事件處理:例如?$(selector).live("click",data,function);

多事件處理:1.利用空格分隔多事件,例如?$(selector).live("click dbclick mouseout",data,function);

2.利用大括號(hào)靈活定義多事件,例如?$(selector).live({event1:function, event2:function, ...}) 

3.空格相隔方式:綁定較為死板,不能給事件單獨(dú)綁定函數(shù),適合處理多個(gè)事件調(diào)用同一函數(shù)情況;

大括號(hào)替代方式:綁定較為靈活,可以給事件單獨(dú)綁定函數(shù); 

data:可選;需要傳遞的參數(shù);

function:必需;當(dāng)綁定事件發(fā)生時(shí),需要執(zhí)行的函數(shù);

適用Jquery版本

jquery1.9版本以下支持,jquery1.9及其以上版本刪除了此方法,jquery1.9以上版本用on()方法來(lái)代替。

3、delegate()

簡(jiǎn)要描述

delegate()?為指定的元素(被選元素的子元素)添加一個(gè)或多個(gè)事件處理程序,并規(guī)定當(dāng)這些事件發(fā)生時(shí)運(yùn)行的函數(shù)。使用 delegate() 方法的事件處理程序適用于當(dāng)前或未來(lái)的元素(比如由腳本創(chuàng)建的新元素)。

使用方式 

$(selector).delegate(childSelector,event,data,function)

childSelector:?必需項(xiàng);需要添加事件處理程序的元素,一般為selector的子元素;

event:必需項(xiàng);添加到元素的一個(gè)或多個(gè)事件,例如 click,dblclick等;

單事件處理:例如?$(selector).delegate(childselector,"click",data,function);

多事件處理:1.利用空格分隔多事件,例如?$(selector).delegate(childselector,"click?dbclick mouseout",data,function);

2.利用大括號(hào)靈活定義多事件,例如?$(selector).delegate(childselector,{event1:function, event2:function, ...}) 

3.空格相隔方式:綁定較為死板,不能給事件單獨(dú)綁定函數(shù),適合處理多個(gè)事件調(diào)用同一函數(shù)情況;

大括號(hào)替代方式:綁定較為靈活,可以給事件單獨(dú)綁定函數(shù); 

data:可選;需要傳遞的參數(shù);

function:必需;當(dāng)綁定事件發(fā)生時(shí),需要執(zhí)行的函數(shù);

適用Jquery版本

jquery1.4.2及其以上版本;

4、on()

簡(jiǎn)要描述

on()?為指定的元素,添加一個(gè)或多個(gè)事件處理程序,并規(guī)定當(dāng)這些事件發(fā)生時(shí)運(yùn)行的函數(shù)。使用 on() 方法的事件處理程序適用于當(dāng)前或未來(lái)的元素(比如由腳本創(chuàng)建的新元素)。

使用方式 

$(selector).on(event,childselector,data,function)

event:必需項(xiàng);添加到元素的一個(gè)或多個(gè)事件,例如 click,dblclick等;

單事件處理:例如?$(selector).on("click",childselector,data,function);

多事件處理:1.利用空格分隔多事件,例如?$(selector).on("click?dbclick mouseout",childseletor,data,function);

2.利用大括號(hào)靈活定義多事件,例如?$(selector).on({event1:function, event2:function, ...},childselector); 

3.空格相隔方式:綁定較為死板,不能給事件單獨(dú)綁定函數(shù),適合處理多個(gè)事件調(diào)用同一函數(shù)情況;

大括號(hào)替代方式:綁定較為靈活,可以給事件單獨(dú)綁定函數(shù); 

childSelector:?可選;需要添加事件處理程序的元素,一般為selector的子元素;

data:可選;需要傳遞的參數(shù);

function:必需;當(dāng)綁定事件發(fā)生時(shí),需要執(zhí)行的函數(shù);

適用Jquery版本

jquery1.7及其以上版本;jquery1.7版本出現(xiàn)之后用于替代bind(),live()綁定事件方式;

四種方式的異同和優(yōu)缺點(diǎn)

相同點(diǎn):

1.都支持單元素多事件的綁定;空格相隔方式或者大括號(hào)替代方式;

2.均是通過(guò)事件冒泡方式,將事件傳遞到document進(jìn)行事件的響應(yīng);

比較和聯(lián)系:

1.bind()函數(shù)只能針對(duì)已經(jīng)存在的元素進(jìn)行事件的設(shè)置;但是live(),on(),delegate()均支持未來(lái)新添加元素的事件設(shè)置;

2.bind()函數(shù)在jquery1.7版本以前比較受推崇,1.7版本出來(lái)之后,官方已經(jīng)不推薦用bind(),替代函數(shù)為on(),這也是1.7版本新添加的函數(shù),同樣,可以

用來(lái)代替live()函數(shù),live()函數(shù)在1.9版本已經(jīng)刪除;

3.live()函數(shù)和delegate()函數(shù)兩者類似,但是live()函數(shù)在執(zhí)行速度,靈活性和CSS選擇器支持方面較delegate()差些

4.bind()支持Jquery所有版本;live()支持jquery1.8-;delegate()支持jquery1.4.2+;on()支持jquery1.7+; 

總結(jié)

如果項(xiàng)目中引用jquery版本為低版本,推薦用delegate(),高版本jquery可以使用on()來(lái)代替,以上僅為個(gè)人看法

怎樣用jquery寫(xiě)一個(gè)事件?

用jquery寫(xiě)一個(gè)事件的操作如下:

1、用confirm輸入以下代碼:

if(confirm("確定要?jiǎng)h除數(shù)據(jù)嗎"))

{

}else{

}

2、用組件jBox(需要下載jquery.jBox-2.3.min.js,并引入)

$.jBox.confirm("您確定要?jiǎng)h除此委托嗎?", "提示", function(v, h, f)

{

if (v == "ok")

{

}else{

}

});

jquery自定義事件有什么用

類似 DOM 的行為:你在 DOM 節(jié)點(diǎn)(包括 document 對(duì)象)監(jiān)聽(tīng)并觸發(fā)自定義事件。這些事件既可以冒泡,也可以被攔截。這正是 Prototype、jQuery 和 MooTools 所做的。如果事件不能擴(kuò)散,就必須在觸發(fā)事件的對(duì)象上進(jìn)行監(jiān)聽(tīng)。

命名空間:一些框架需要你為事件指定命名空間,通常使用一個(gè)點(diǎn)號(hào)前綴來(lái)把你的事件和原生事件區(qū)分開(kāi)。

自定義額外數(shù)據(jù):JavaScript 框架允許你在觸發(fā)自定義事件時(shí),向事件處理器傳送額外的數(shù)據(jù)。jQuery 可以向事件處理器傳遞任意數(shù)量的額外參數(shù)。

通用事件 API:只用 Dojo 保留了操作原生 DOM 事件的正常API。而操作自定義事件需要特殊的發(fā)布/訂閱 API。這也意味著 Dojo 中的自定義事件不具有DOM事件的一些行為(比如冒泡)。

聲明:我們往往需要在預(yù)定義的事件中加入一些特殊的變化(例如,需要Alt鍵按下才能觸發(fā)的單擊事件),MooTools 運(yùn)行你定義此類自定義事件。此類事件需要預(yù)先聲明,即便你只是聲明他們的名字。任何未聲明的自定義事件不會(huì)被觸發(fā)。

理論太抽象,看看 jQuery 框架中如何使用事件。

jQuery 的事件自定義事件還是通過(guò) on 綁定的,然后再通過(guò) trigger 來(lái)觸發(fā)這個(gè)事件。

//給element綁定hello事件

element.bind("hello",function(){

alert("hello world!");

});

//觸發(fā)hello事件

element.trigger("hello");

這段代碼這樣寫(xiě)似乎感覺(jué)不出它的好處,看了下面的例子也許你會(huì)明白使用自定義事件的好處了,參考右邊的代碼。

trigger需要處理的問(wèn)題

模擬事件對(duì)象,用戶模擬處理停止事件冒泡(因?yàn)椴皇峭ㄟ^(guò)瀏覽器系統(tǒng)觸發(fā)的,而是自動(dòng)觸發(fā)的,所以這個(gè)事件對(duì)象要如何處理?)

區(qū)分事件類型,觸發(fā)標(biāo)準(zhǔn)的瀏覽器事件 和 自定義事件名綁定的處理程序。

擬冒泡機(jī)制

當(dāng)事件是 click 類型,自然是本身支持冒泡這樣的行為,通過(guò) stopPropagation 阻止即可

當(dāng)然一些事件,如 focusin 和 blur 本身不冒泡,但 jQuery 為了跨瀏覽器一致性, jQuery 需要在這些事件上模擬了冒泡行為,jQuery 要如何處理?

那么如果是自定義的aaa的事件名,又如何處理冒泡?

ul id="tabs"

li data-tab="users"Users/li

li data-tab="groups"Groups/li

/ul

div id="tabsContent"

div data-tab="users"part1/div

div data-tab="groups"part2/div

/div

script type="text/javascript"

$.fn.tabs = function(control) {

var element = $(this);

var control = $(control);

element.delegate("li", "click", function() {

var tabName = $(this).attr("data-tab");

//點(diǎn)擊li的時(shí)候觸發(fā)change.tabs自定義事件

element.trigger("change.tabs", tabName);

});

//給element綁定一個(gè)change.tabs自定義事件

element.bind("change.tabs", function(e, tabName) {

element.find("li").removeClass("active");

element.find("[data-tab='" + tabName + "']").addClass("active");

});

element.bind("change.tabs", function(e, tabName) {

control.find("[data-tab]").removeClass("active");

control.find("[data-tab='" + tabName + "']").addClass("active");

});

// 激活第一個(gè)選項(xiàng)卡

var firstName = element.find("li:first").attr("data-tab");

element.trigger("change.tabs", firstName);

return this;

};

$("ul#tabs").tabs("#tabsContent");

/script


新聞標(biāo)題:jquery事件,jQuery事件處理
分享鏈接:http://weahome.cn/article/dsssjsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部