前端基础-jQuery的事件的用法
閱讀目錄
一、常用事件
1、鼠標(biāo)事件之click事件
用交互操作中,最簡單直接的操作就是點(diǎn)擊操作。jQuery提供了兩個(gè)方法一個(gè)是click方法用于監(jiān)聽用戶單擊操作,另一個(gè)方法是dbclick方法用于監(jiān)聽用戶雙擊操作。
這兩個(gè)方法的用法是類似的,下面以click()事件為例
使用上非常簡單:
方法一:$ele.click()
綁定$ele元素,不帶任何參數(shù)一般是用來指定觸發(fā)一個(gè)事件,用的比較少
<div id="test">點(diǎn)擊觸發(fā)<div> $("ele").click(function(){alert('觸發(fā)指定事件') }) $("#test").click(function(){$("ele").click() //手動(dòng)指定觸發(fā)事件 });方法二:$ele.click( handler(eventObject) )
綁定$ele元素,每次$ele元素觸發(fā)點(diǎn)擊操作會(huì)執(zhí)行回調(diào)?handler函數(shù),這樣可以針對(duì)事件的反饋?zhàn)龊芏嗖僮髁?#xff0c;方法中的this是指向了綁定事件的元素
<div id="test">點(diǎn)擊觸發(fā)<div> $("#test").click(function() {//this指向 div元素 });方法三:$ele.click( [eventData ], handler(eventObject) )
使用與方法二一致,不過可以接受一個(gè)數(shù)據(jù)參數(shù),這樣的處理是為了解決不同作用域下數(shù)據(jù)傳遞的問題
<div id="test">點(diǎn)擊觸發(fā)<div> $("#test").click(11111,function(e) {//this指向 div元素//e.data => 11111 傳遞數(shù)據(jù) });2、鍵盤事件之keydown()與keyup()事件
鼠標(biāo)有mousedown,mouseup之類的事件,這是根據(jù)人的手勢動(dòng)作分解的2個(gè)觸發(fā)行為。相對(duì)應(yīng)的鍵盤也有這類事件,將用戶行為分解成2個(gè)動(dòng)作,
鍵盤按下與松手,針對(duì)這樣的2種動(dòng)作,jQuery分別提供了對(duì)應(yīng)keydown與keyup方法來監(jiān)聽
keydown事件:
當(dāng)用戶在一個(gè)元素上第一次按下鍵盤上字母鍵的時(shí)候,就會(huì)觸發(fā)它。使用上非常簡單,與基本事件參數(shù)處理保持一致,這里使用不在重復(fù)了,列出使用的方法
//直接綁定事件 $elem.keydown( handler(eventObject) ) //傳遞參數(shù) $elem.keydown( [eventData ], handler(eventObject) ) //手動(dòng)觸發(fā)已綁定的事件 $elem.keydown()keyup事件:
當(dāng)用戶在一個(gè)元素上第一次松手鍵盤上的鍵的時(shí)候,就會(huì)觸發(fā)它。使用方法與keydown是一致的只是觸發(fā)的條件是方法的
注意:
3、鼠標(biāo)事件之hover事件
jQuery直接提供了一個(gè)hover方法,可以便捷處理。只需要在hover方法中傳遞2個(gè)回調(diào)函數(shù)就可以了,不需要顯示的綁定2個(gè)事件
$(selector).hover(handlerIn, handlerOut)- handlerIn(eventObject):當(dāng)鼠標(biāo)指針進(jìn)入元素時(shí)觸發(fā)執(zhí)行的事件函數(shù)
- handlerOut(eventObject):當(dāng)鼠標(biāo)指針離開元素時(shí)觸發(fā)執(zhí)行的事件函數(shù)
4、鼠標(biāo)事件之focusin事件
當(dāng)一個(gè)元素,或者其內(nèi)部任何一個(gè)元素獲得焦點(diǎn)的時(shí)候,例如:input元素,用戶在點(diǎn)擊聚焦的時(shí)候,
如果開發(fā)者需要捕獲這個(gè)動(dòng)作的時(shí)候,jQuery提供了一個(gè)focusin事件
使用上非常簡單:
方法一:$ele.focusin()
綁定$ele元素,不帶任何參數(shù)一般是用來指定觸發(fā)一個(gè)事件,一般用的比較少
<div id="test">點(diǎn)擊觸發(fā)<div> $("ele").focusin(function(){alert('觸發(fā)指定事件') });方法二:$ele.focusin( handler )
綁定$ele元素,每次$ele元素觸發(fā)點(diǎn)擊操作會(huì)執(zhí)行回調(diào)?handler函數(shù)
這樣可以針對(duì)事件的反饋?zhàn)龊芏嗖僮髁?/p> <div id="test">點(diǎn)擊觸發(fā)<div> $("#test").focusin(function() {//this指向 div元素 });
方法三:$ele.focusin( [eventData ], handler )
使用與方法二一致,不過可以接受一個(gè)數(shù)據(jù)參數(shù),這樣的處理是為了解決不同作用域下數(shù)據(jù)傳遞的問題
<div id="test">點(diǎn)擊觸發(fā)<div> $("#test").focusin(11111,function(e) {//this指向 div元素//e.data => 11111 傳遞數(shù)據(jù) });<h2>.focusin()方法</h2><div class="left"><div class="aaron">點(diǎn)擊聚焦:<input type="text" /></div></div><div class="right"><div class="aaron1">點(diǎn)擊聚焦并傳遞參數(shù):<input type="text" /></div></div><script type="text/javascript">//input聚焦//給input元素增加一個(gè)邊框$("input:first").focusin(function() {$(this).css('border','2px solid red')})</script><script type="text/javascript">//不同函數(shù)傳遞數(shù)據(jù)function fn(e) {$(this).val(e.data)}function a() {$("input:last").focusin('網(wǎng)', fn)}a();</script> 實(shí)例4、鼠標(biāo)事件之focusout事件
當(dāng)一個(gè)元素,或者其內(nèi)部任何一個(gè)元素失去焦點(diǎn)的時(shí)候,比如input元素,用戶在點(diǎn)擊失去焦的時(shí)候,如果開發(fā)者需要捕獲這個(gè)動(dòng)作,
jQuery提供了一個(gè)focusout事件
使用上非常簡單:
方法一:$ele.focusout()
綁定$ele元素,不帶任何參數(shù)一般是用來指定觸發(fā)一個(gè)事件,可能一般用的比較少
<div id="test">點(diǎn)擊觸發(fā)<div> $("ele").focusout(function(){alert('觸發(fā)指定事件') });方法二:$ele.focusout( handler )
綁定$ele元素,每次$ele元素觸發(fā)點(diǎn)擊操作會(huì)執(zhí)行回調(diào)?handler函數(shù)
這樣可以針對(duì)事件的反饋?zhàn)龊芏嗖僮髁?/p> <div id="test">點(diǎn)擊觸發(fā)<div> $("#test").focusout(function() {//this指向 div元素 });
方法三:$ele.focusout( [eventData ], handler )
使用與方法二一致,不過可以接受一個(gè)數(shù)據(jù)參數(shù),這樣的處理是為了解決不同作用域下數(shù)據(jù)傳遞的問題
<div id="test">點(diǎn)擊觸發(fā)<div> $("#test").focusout(11111,function(e) {//this指向 div元素//e.data => 11111 傳遞數(shù)據(jù) });<h2>.focusout()方法</h2><div class="left"><div class="aaron">點(diǎn)擊觸發(fā)失去焦點(diǎn):<input type="text" /></div></div><div class="right"><div class="aaron1">點(diǎn)擊觸發(fā)失去焦點(diǎn)并傳遞參數(shù):<input type="text" /></div></div><script type="text/javascript">//input失去焦點(diǎn)//給input元素增加一個(gè)邊框$("input:first").focusout(function() {$(this).css('border','2px solid red')})</script><script type="text/javascript">//不同函數(shù)傳遞數(shù)據(jù)function fn(e) {$(this).val(e.data)}function a() {$("input:last").focusout('網(wǎng)', fn)}a();</script> 實(shí)例5、表單事件之blur與focus事件
我們學(xué)過了表單處理事件focusin事件與focusout事件,同樣用于處理表單焦點(diǎn)的事件還有blur與focus事件
6、表單事件之change事件
<input>元素,<textarea>和<select>元素的值都是可以發(fā)生改變的,開發(fā)者可以通過change事件去監(jiān)聽這些改變的動(dòng)作
input元素
監(jiān)聽value值的變化,當(dāng)有改變時(shí),失去焦點(diǎn)后觸發(fā)change事件。對(duì)于單選按鈕和復(fù)選框,當(dāng)用戶用鼠標(biāo)做出選擇時(shí),該事件立即觸發(fā)。select元素
對(duì)于下拉選擇框,當(dāng)用戶用鼠標(biāo)作出選擇時(shí),該事件立即觸發(fā)textarea元素
多行文本輸入框,當(dāng)有改變時(shí),失去焦點(diǎn)后觸發(fā)change事件change事件很簡單,無非就是注意下觸發(fā)的先后行為
<h2>input、textarea與select</h2><div class="left"><div class="aaron">input:<input class="target1" type="text" value="監(jiān)聽input的改變" /></div><div class="aaron1">select:<select class="target2"><option value="option1" selected="selected">Option 1</option><option value="option2">Option 2</option></select></div><div class="aaron3">textarea:<textarea class="target2" rows="3" cols="20">多行的文本輸入控件</textarea></div></div> 輸出結(jié)果:<div id="result"></div><script type="text/javascript">//監(jiān)聽input值的改變$('.target1').change(function(e) {$("#result").html(e.target.value)});//監(jiān)聽select:$(".target2").change(function(e) {$("#result").html(e.target.value)})//監(jiān)聽textarea:$(".target3").change(function(e) {$("#result").html(e.target.value)})</script> 實(shí)例7、表單事件之select事件
當(dāng) textarea 或文本類型的 input 元素中的文本被選擇時(shí),會(huì)發(fā)生 select 事件。
這個(gè)函數(shù)會(huì)調(diào)用執(zhí)行綁定到select事件的所有函數(shù),包括瀏覽器的默認(rèn)行為。可以通過在某個(gè)綁定的函數(shù)中返回false來防止觸發(fā)瀏覽器的默認(rèn)行為。
使用上非常簡單:
方法一:.select()
觸發(fā)元素的select事件:
$("input").select();方法二:$ele.select( handler(eventObject) )
綁定$ele元素,每次$ele元素觸發(fā)點(diǎn)擊操作會(huì)執(zhí)行回調(diào)?handler函數(shù)
這樣可以針對(duì)事件的反饋?zhàn)龊芏嗖僮髁?/p> <input id="test" value="文字選中"></input> $("#test").select(function() { //響應(yīng)文字選中回調(diào)//this指向 input元素 });
方法三:$ele.select( [eventData ], handler(eventObject) )
使用與方法二一致,不過可以接受一個(gè)數(shù)據(jù)參數(shù),這樣的處理是為了解決不同作用域下數(shù)據(jù)傳遞的問題
<input id="test" value="文字選中"></input> $("#test").select(11111,function(e) {//響應(yīng)文字選中回調(diào)//this指向 div元素 //e.data => 11111 傳遞數(shù)據(jù) });<h2>input與textarea</h2><div class="left"><h4>測試一</h4><div class="aaron">選中文字:input<input type="text" value="多多帥" /></div><button id="bt1">觸發(fā)input元素的select事件</button><h4>測試二</h4><div class="aaron">textarea:<textarea rows="3" cols="20">用鼠標(biāo)選中文字</textarea></div></div><script type="text/javascript">//監(jiān)聽input元素中value的選中//觸發(fā)元素的select事件$("input").select(function(e){alert(e.target.value)})$("#bt1").click(function(){$("input").select();})//監(jiān)聽textarea元素中value的選中$('textarea').select(function(e) {alert(e.target.value);});</script> 實(shí)例8、表單事件之submit事件
提交表單是一個(gè)最常見的業(yè)務(wù)需求,比如用戶注冊(cè),一些信息的輸入都是需要表單的提交。同樣的有時(shí)候開發(fā)者需要在表單提交的時(shí)候過濾一些的數(shù)據(jù)、
做一些必要的操作(例如:驗(yàn)證表單輸入的正確性,如果錯(cuò)誤就阻止提交,從新輸入)此時(shí)可以通過submit事件,監(jiān)聽下提交表單的這個(gè)動(dòng)作
使用上非常簡單,與基本事件參數(shù)處理保持一致
方法一:$ele.submit()
綁定$ele元素,不帶任何參數(shù)一般是用來指定觸發(fā)一個(gè)事件,用的比較少
<div id="test">點(diǎn)擊觸發(fā)<div> $("ele").submit(function(){alert('觸發(fā)指定事件') }) $("#text").click(function(){$("ele").submit() //指定觸發(fā)事件 });方法二:$ele.submit( handler(eventObject) )
綁定$ele元素,每次$ele元素觸發(fā)點(diǎn)擊操作會(huì)執(zhí)行回調(diào)?handler函數(shù)
這樣可以針對(duì)事件的反饋?zhàn)龊芏嗖僮髁?/p> <form id="target" action="destination.html"><input type="submit" value="Go" /> </form> $("#target").submit(function() { //綁定提交表單觸發(fā)//this指向 from元素 });
方法三:$ele.submit( [eventData ], handler(eventObject) )
使用與方法二一致,不過可以接受一個(gè)數(shù)據(jù)參數(shù),這樣的處理是為了解決不同作用域下數(shù)據(jù)傳遞的問題
<form id="target" action="destination.html"><input type="submit" value="Go" /> </form> $("#target").submit(11111,function(data) { //綁定提交表單觸發(fā)//data => 1111 //傳遞的data數(shù)據(jù) });通過在<form>元素上綁定submit事件,開發(fā)者可以監(jiān)聽到用戶的提交表單的的行為
具體能觸發(fā)submit事件的行為:
- <input type="submit">
- <input type="image">
- <button type="submit">
- 當(dāng)某些表單元素獲取焦點(diǎn)時(shí),敲擊Enter(回車鍵)
上述這些操作下,都可以截獲submit事件。
這里需要特別注意:
form元素是有默認(rèn)提交表單的行為,如果通過submit處理的話,需要禁止瀏覽器的這個(gè)默認(rèn)行為 傳統(tǒng)的方式是調(diào)用事件對(duì)象 e.preventDefault() 來處理, jQuery中可以直接在函數(shù)中最后結(jié)尾return false即可 jQuery處理如下:$("#target").submit(function(data) { return false; //阻止默認(rèn)行為,提交表單 });<h2>submit</h2><div class="left"><div class="aaron"><form id="target1" action="test.html">回車鍵或者點(diǎn)擊提交表單: <input type="text" value="輸入新的值" /><input type="submit" value="Go" /></form></div><div class="aaron"><form id="target2" action="destination.html">回車鍵或者點(diǎn)擊提交表單,禁止瀏覽器默認(rèn)跳轉(zhuǎn): <input type="text" value="輸入新的值" /><input type="submit" value="Go" /></form></div></div><script type="text/javascript">//回車鍵或者點(diǎn)擊提交表單$('#target1').submit(function(e) {alert('捕獲提交表達(dá)動(dòng)作,不阻止頁面跳轉(zhuǎn)')});//回車鍵或者點(diǎn)擊提交表單,禁止瀏覽器默認(rèn)跳轉(zhuǎn):$('#target2').submit(function() {alert('捕獲提交表達(dá)動(dòng)作,阻止頁面跳轉(zhuǎn)')return false;});</script> 實(shí)例二、事件綁定
1、on()的多事件綁定
之前學(xué)的鼠標(biāo)事件,表單事件與鍵盤事件都有個(gè)特點(diǎn),就是直接給元素綁定一個(gè)處理函數(shù),所有這類事件都是屬于快捷處理。
翻開源碼其實(shí)可以看到,所有的快捷事件在底層的處理都是通過一個(gè)"on"方法來實(shí)現(xiàn)的。jQuery on()方法是官方推薦的綁定事件的一個(gè)方法。
基本用法:.on( events ,[?selector ] ,[?data ] )
- events: 事件
- selector: 選擇器(可選的)
- function: 事件處理函數(shù)
最常見的給元素綁定一個(gè)點(diǎn)擊事件,對(duì)比一下快捷方式與on方式的不同
$("#elem").click(function(){}) //快捷方式 $("#elem").on('click',function(){}) //on方式最大的不同點(diǎn)就是on是可以自定義事件名,當(dāng)然不僅僅只是如何,繼續(xù)往下看
多個(gè)事件綁定同一個(gè)函數(shù)
$("#elem").on("mouseover mouseout",function(){ });通過空格分離,傳遞不同的事件名,可以同時(shí)綁定多個(gè)事件
多個(gè)事件綁定不同函數(shù)
$("#elem").on({mouseover:function(){}, mouseout:function(){} });通過空格分離,傳遞不同的事件名,可以同時(shí)綁定多個(gè)事件,每一個(gè)事件執(zhí)行自己的回調(diào)方法
將數(shù)據(jù)傳遞到處理程序
function greet( event ) {alert( "Hello " + event.data.name ); //Hello 天王蓋地虎 } $( "button" ).on( "click", {name: "天王蓋地虎" }, greet );可以通過第二參數(shù)(對(duì)象),當(dāng)一個(gè)事件被觸發(fā)時(shí),要傳遞給事件處理函數(shù)的
<h2>on綁定多事件</h2><h4>測試一</h4><div class="left">點(diǎn)擊觸發(fā):on('click',fn)<div id="test1"></div></div><script type="text/javascript">//事件綁定一$("#test1").on('click', function(e) {$(this).text('觸發(fā)事件:' + e.type)})</script><h4>測試二</h4><div class="left">點(diǎn)擊觸發(fā):on('mousedown mouseup')<div id="test2"></div></div><script type="text/javascript">//多事件綁定一$("#test2").on('mousedown mouseup', function(e) {$(this).text('觸發(fā)事件:' + e.type)})</script><h4>測試三</h4><div class="right">點(diǎn)擊觸發(fā):on(mousedown:fn1,mouseup:fn2)<div id="test3"></div></div><script type="text/javascript">//多事件綁定二$("#test3").on({mousedown: function(e) {$(this).text('觸發(fā)事件:' + e.type)},mouseup: function(e) {$(this).text('觸發(fā)事件:' + e.type)}})</script> 實(shí)例2、on()的高級(jí)用法
針對(duì)自己處理機(jī)制中,不僅有on方法,還有根據(jù)on演變出來的live方法(1.7后去掉了),delegate方法等等。
這些方法的底層實(shí)現(xiàn)部分 還是on方法,這是利用了on的另一個(gè)事件機(jī)制委托的機(jī)制衍變而來的
委托機(jī)制
.on( events ,[ selector ] ,[ data ], handler(eventObject) )在on的第二參數(shù)中提供了一個(gè)selector選擇器,簡單的來描述下
//參考下面3層結(jié)構(gòu)<div class="left"><p class="aaron"><a>目標(biāo)節(jié)點(diǎn)</a> //點(diǎn)擊在這個(gè)元素上</p> </div> //給出如下代碼: $("div").on("click","p",fn)事件綁定在最上層div元素上,當(dāng)用戶觸發(fā)在a元素上,事件將往上冒泡,一直會(huì)冒泡在div元素上。如果提供了第二參數(shù),
那么事件在往上冒泡的過程中遇到了選擇器匹配的元素,將會(huì)觸發(fā)事件回調(diào)函數(shù)
<h2>on事件委托</h2><div class="left"><a>錢多多</a><div class="aaron"><a>111</a><a>點(diǎn)擊這里</a></div></div><script type="text/javascript">//給body綁定一個(gè)click事件//沒有直接a元素綁定點(diǎn)擊事件//通過委托機(jī)制,點(diǎn)擊a元素的時(shí)候,事件觸發(fā)$('body').on('click', 'a', function(e) {alert(e.target.textContent)})</script> 實(shí)例三、移除事件
1、卸載事件off()方法
- 通過.on()綁定的事件處理程序
- 通過off() 方法移除該綁定
根據(jù)on綁定事件的一些特性,off方法也可以通過相應(yīng)的傳遞組合的事件名,名字空間,選擇器或處理函數(shù)來移除綁定在元素上指定的事件處理函數(shù)。
當(dāng)有多個(gè)過濾參數(shù)時(shí),只有與這些參數(shù)完全匹配的事件處理函數(shù)才會(huì)被移除
綁定2個(gè)事件
$("elem").on("mousedown mouseup",fn)刪除一個(gè)事件
$("elem").off("mousedown")刪除所有事件
$("elem").off("mousedown mouseup")快捷方式刪除所有事件,這里不需要傳遞事件名了,節(jié)點(diǎn)上綁定的所有事件講全部銷毀
<h2>刪除事件</h2><h4>測試一</h4><div class="left">on('mousedown mouseup')<div class="aaron">點(diǎn)擊觸發(fā)</div></div><button>點(diǎn)擊刪除mousedown事件</button><script type="text/javascript">var n = 0;//綁定事件$(".aaron:first").on('mousedown mouseup', function(e) {$(this).text( '觸發(fā)類型:' + (e.type) + ",次數(shù)" + ++n)++n;})//刪除事件$("button:first").click(function() {$(".aaron:first").off('mousedown')})</script><h4>測試一</h4><div class="left">on('mousedown mouseup')<div class="aaron">點(diǎn)擊觸發(fā)</div></div><button>點(diǎn)擊銷毀所有事件off</button><script type="text/javascript">var n = 0;//綁定事件$(".aaron:last").on('mousedown mouseup', function(e) {$(this).text( '觸發(fā)類型:' + (e.type) + ",次數(shù)" + ++n)++n;})//刪除事件$("button:last").click(function() {$(".aaron:last").off()})</script> 實(shí)例四、頁面載入
當(dāng)DOM載入就緒可以查詢及操縱時(shí)綁定一個(gè)要執(zhí)行的函數(shù)。這是事件模塊中最重要的一個(gè)函數(shù),因?yàn)樗梢詷O大地提高web應(yīng)用程序的響應(yīng)速度。
兩種寫法:
$(document).ready(function(){ // 在這里寫你的JS代碼... })簡寫:
$(function(){ // 你在這里寫你的代碼 })文檔加載完綁定事件,并且阻止默認(rèn)事件發(fā)生:
<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登錄注冊(cè)示例</title><style>.error {color: red;}</style> </head> <body><form id="myForm"><label for="name">姓名</label><input type="text" id="name"><span class="error"></span><label for="passwd">密碼</label><input type="password" id="passwd"><span class="error"></span><input type="submit" id="modal-submit" value="登錄"> </form><script src="jquery-3.2.1.min.js"></script> <script src="s7validate.js"></script> <script>function myValidation() {// 多次用到的jQuery對(duì)象存儲(chǔ)到一個(gè)變量,避免重復(fù)查詢文檔樹var $myForm = $("#myForm");$myForm.find(":submit").on("click", function () {// 定義一個(gè)標(biāo)志位,記錄表單填寫是否正常var flag = true;$myForm.find(":text, :password").each(function () {var val = $(this).val();if (val.length <= 0 ){var labelName = $(this).prev("label").text();$(this).next("span").text(labelName + "不能為空");flag = false;}});// 表單填寫有誤就會(huì)返回false,阻止submit按鈕默認(rèn)的提交表單事件return flag;});// input輸入框獲取焦點(diǎn)后移除之前的錯(cuò)誤提示信息$myForm.find("input[type!='submit']").on("focus", function () {$(this).next(".error").text("");})}// 文檔樹就緒后執(zhí)行$(document).ready(function () {myValidation();}); </script> </body> </html> 實(shí)例?
轉(zhuǎn)載于:https://www.cnblogs.com/ManyQian/p/9163257.html
總結(jié)
以上是生活随笔為你收集整理的前端基础-jQuery的事件的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring cloud系列之Zuul配
- 下一篇: 聚类 高维聚类 聚类评估标准 EM模型聚