淺談jQuery 中的事件冒泡和阻止默認(rèn)行為
1、事件冒泡
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript" src="js/jquery-1.7.2.js"></script> <script type="text/javascript"> $(function() { //為 <span> 元素綁定 click 事件 $("span").click(function() { $("#msg").html($("#msg").html() + "<p>內(nèi)層span元素被單擊</p>"); }); //為 Id 為 content 的 <div> 元素綁定 click 事件 $("#content").click(function() { $("#msg").html($("#msg").html() + "<p>外層div元素被單擊</p>"); }); //為 <body> 元素綁定 click 事件 $("body").click(function() { $("#msg").html($("#msg").html() + "<p>body元素被單擊</p>"); }); }); </script> <!-- CSS --> <style type="text/css"> #content { background: #b17af5; } </style> </head> <!-- HTML --> <body> <div id="content"> 外層div元素<br /> <span style="background: silver;">內(nèi)層span元素</span><br /> 外層div元素 </div><br /> <div id="msg"></div> </body> </html>
當(dāng)點擊內(nèi)部 <span> 元素時,會觸發(fā)自身及外層 <div> 和 <body> 的點擊事件,這就是事件冒泡引起的。事件會隨著 DOM 的層次結(jié)構(gòu)依次向上傳播。
事件冒泡可能會引起意料之外的效果,有時候需要阻止事件的冒泡行為,使用 stopPropagation() 方法來實現(xiàn)。
修改 <span> 元素的 click 事件函數(shù):
//為 <span> 元素綁定 click 事件 $("span").click(function(event) { //為方法添加一個事件對象參數(shù) $("#msg").html($("#msg").html() + "<p>內(nèi)層span元素被單擊</p>"); event.stopPropagation(); //阻止 <span> 的 click 事件冒泡 });
此時點擊內(nèi)部 <span> 元素時,只會觸發(fā)自身的 click 事件,不會再向上冒泡。
2、阻止默認(rèn)行為
有時候用戶的操作未滿足某些條件時,需要阻止某些元素的默認(rèn)行為,如鏈接的跳轉(zhuǎn)和表單的提交等,jQuery 提供了 preventDefault() 方法來實現(xiàn)。
當(dāng)用戶未填寫用戶名時,阻止表單提交:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript" src="js/jquery-1.7.2.js"></script> <script type="text/javascript"> $(function() { $(":submit").click(function(event) { //為方法添加一個事件對象參數(shù) //當(dāng)未輸入用戶名時,提示并阻止提交 if ($(":text").val() == "") { $("#msg").text("用戶名不能為空"); event.preventDefault(); //阻止提交按鈕的默認(rèn)行為(提交表單) } }); }); </script> </head> <!-- HTML --> <body> <form action="register.action"> 用戶名<input type="text" name="id" /> <input type="submit" value="注冊" /> <div id="msg"></div> </form> </body> </html>
如果想同時阻止事件冒泡和阻止元素默認(rèn)行為,可以在事件函數(shù)中返回 false 來代替調(diào)用 stopPropagation() 和 preventDefault() 方法。
如:
$(":submit").click(function(event) { //為方法添加一個事件對象參數(shù) //當(dāng)未輸入用戶名時,提示并阻止提交 if ($(":text").val() == "") { $("#msg").text("用戶名不能為空"); return false; //阻止提交按鈕的默認(rèn)行為(提交表單)和事件冒泡 } });$("span").click(function(event) { //為方法添加一個事件對象參數(shù) $("#msg").html($("#msg").html() + "<p>內(nèi)層span元素被單擊</p>"); return false; //阻止 <span> 的 click 事件冒泡和默認(rèn)行為(此元素沒有默認(rèn)行為) });
以上這篇淺談jQuery 中的事件冒泡和阻止默認(rèn)行為就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery中setTimeout的幾種使用方法小結(jié)
jQuery 中 setTimeout/setInterval 不能像在原生態(tài) javascript 中那樣使用, 否則會報錯.2013-04-04jquery 設(shè)置style:display的方法
這篇文章主要介紹了jquery 設(shè)置style:display的方法,需要的朋友可以參考下2015-01-01jquery異步調(diào)用頁面后臺方法‏(asp.net)
給出了兩個簡單的例子,無參數(shù)的和有參數(shù)的,返回的都是json數(shù)據(jù)。2011-03-03jQuery 打造動態(tài)下滑菜單實現(xiàn)說明
本教程將分步講解如何使用JQuery和CSS打造一個炫酷動感菜單。2010-04-04jQuery學(xué)習(xí)基礎(chǔ)知識小結(jié)
jQuery學(xué)習(xí)基礎(chǔ)知識小結(jié),剛開始學(xué)習(xí)jquery的朋友可以參考下。2010-11-11通過Jquery遍歷Json的兩種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)代碼
在ajax交互中,我們從服務(wù)器端返回的數(shù)據(jù)類型有xml,html,script,json,jsonp,text,本文以json為例,講述了在前臺如何利用jquery遍歷json的兩種數(shù)據(jù)結(jié)構(gòu)2011-01-01