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