最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JQuery中DOM事件冒泡實例分析

 更新時間:2015年06月13日 11:10:47   作者:簡明現代魔法  
這篇文章主要介紹了JQuery中DOM事件冒泡用法,實例分析了事件冒泡的原理與阻止冒泡的方法,需要的朋友可以參考下

本文實例分析了JQuery中DOM事件冒泡。分享給大家供大家參考。具體分析如下:

什么是冒泡

在頁面上可以有多個事件,也可以多個元素響應同一個事件。假設網頁上有兩個元素,其中一個元素嵌套在另一個元素里,并且都被綁定了click事件,同時body元素上也綁定了click事件。

<div id="content">
  外層div元素
  <span>內層span元素</span>
  外層div元素
</div>

<script type="text/javascript">
$(function(){
  // 為span元素綁定click事件
  $('span').bind("click",function(){
    var txt = $('#msg').html() + "<p>內層span元素被點擊.<p/>";
    $('#msg').html(txt);
  });
  // 為div元素綁定click事件
  $('#content').bind("click",function(){
   var txt = $('#msg').html() + "<p>外層div元素被點擊.<p/>";
    $('#msg').html(txt);
  });
  // 為body元素綁定click事件
  $("body").bind("click",function(){
    var txt = $('#msg').html() + "<p>body元素被點擊.<p/>";
    $('#msg').html(txt);
  });
})
</script>

當單擊內部span元素,即觸發(fā)span元素的click事件時,會輸出3條記錄。只單擊內部span元素,就會觸發(fā)外部div元素和body元素上綁定的click事件。這是由事件冒泡引起的。在單擊span元素的同時,也單擊了包含span元素的元素div和包含div元素的元素body,并且每一個元素都會按照特定的順序響應click事件。

元素的click事件會按照以下順序“冒泡”。

1. <span>
2. <div>
3. <body>

之所以稱為冒泡,是因為事件會按照DOM的層次結構像水泡一樣不斷向上直至頂端。

事件冒泡引發(fā)的問題

事件冒泡可能會引起預料之外的效果。上例中,本來只想觸發(fā)<span>元素的click事件,然而<div>元素和<body>元素的click事件也同時被觸發(fā)了。因此,有必要對事件的作用范圍進行限制。當單擊<span>元素時,只觸發(fā)<span>元素的click事件,而不觸發(fā)<div>元素和<body>元素的click事件:當單擊<div>元素時,只觸發(fā)<div>元素的click事件,而不觸發(fā)<body>元素的click事件。

事件對象

由于IE-DOM和標準DOM實現事件對象的方法各不相同,導致在不同瀏覽器中獲取事件對象變得比較困難。針對這個問題,JQuery進行了必要的擴展和封裝,從而使得在任何瀏覽器中都能很輕松地獲取事件對象以及事件對象的一些屬性。

在程序中使用事件對象非常簡單,只需要為函數添加一個參數,jQuery代碼如下:

$("element").bind("click",function(event){ 
  //event : 事件對象 
  //... 
});

這樣,當單擊“element”元素時,事件對象就被創(chuàng)建了。這個事件對象只有事件處理函數才能訪問到。事件處理函數執(zhí)行完畢后,事件對象就被銷毀。

停止事件冒泡

停止事件冒泡可以阻止事件中其他對象的事件處理函數被執(zhí)行。在JQuery中提供了stopPropagation()方法來停止事件冒泡。

$(function(){
   // 為span元素綁定click事件
  $('span').bind("click",function(event){
    var txt = $('#msg').html() + "內層span元素被點擊";
    $('#msg').html(txt);
    event.stopPropagation(); // 阻止事件冒泡
  });
})

當單擊<span>元素時,只會觸發(fā)<span>元素上的click事件,而不會觸發(fā)<div>元素和<body>元素的click事件??梢杂猛瑯拥姆椒ń鉀Q<div>元素上的冒泡問題。

$('#content').bind("click",function(event){ 
 var txt = $('#msg').html() + "<p>外層div元素被點擊.<p/>"; 
 $('#msg').html(txt); 
 event.stopPropagation(); // 阻止事件冒泡 
});

這樣,當單擊<span>元素或者<div>元素時,就只會輸出相應的內容,而不會輸出其他的內容。

阻止默認行為

網頁中的元素有自己默認的行為,例如,單擊超鏈接后會跳轉、單擊“提交”按鈕后表單會提交,有時需要阻止元素的默認行為。

在JQuery中,提供了preventDefault()方法來阻止元素的默認行為。

舉一個例子,在項目中,經常需要驗證表單,在單擊“提交”按鈕時,驗證表單內容,例如某元素是否是必填字段,某元素長度是否夠6位等,當表單不符合提交條件時,要阻止表單的提交(默認行為)。

<form action="test.html">
用戶名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>

$(function(){
 $("#sub").bind("click",function(event){
   var username = $("#username").val(); //獲取元素的值
   if(username==""){ //判斷值是否為空
      $("#msg").html("<p>文本框的值不能為空.</p>"); //提示信息
      event.preventDefault(); //阻止默認行為 ( 表單提交 )
     }
 })
})

當用戶名為空時,單擊“提交”按鈕,會出現提示,并且表單不能提交。只有在用戶名里輸入內容后,才能提交表單。可見,preventDefault()方法能阻止表單的提交行為。

如果想同時對事件對象停止冒泡和默認行為,可以在事件處理函數中返同false。這是對在事件對象上同時調用stopPrapagation()方法和preventDefault()方法的一種簡寫方式。

在表單的例子中,可以把 event.preventDefault(); 改寫為: return false;

也可以把事件冒泡例子中的 event.stopPropaqation(); 改寫為: return false;

事件捕獲

事件捕獲和事件冒泡是剛好相反的兩個過程,事件捕獲是從最頂端往下開始觸發(fā)。還是冒泡事件的例子,其中元素的click事件會按照以下順序捕獲。

1. <body>
2. <div>
3. <span>

很顯然,事件捕獲是從最外層元素開始,然后再到最里層元素。因此綁定的click事件,首先會傳遞給<body>元素,然后傳遞給<div>元素,最后才傳遞給<span>元素。

遺憾的是,并非所有主流瀏覽器都支持事件捕獲,并且這個缺陷無法通過JavaScript來修復。JQuery不交持事件捕獲,如果讀者需要使用事件捕獲,請直接使用原生的JavaScript。

希望本文所述對大家的jQuery程序設計有所幫助。

相關文章

最新評論

宁津县| 福州市| 蚌埠市| 云霄县| 江阴市| 乌海市| 桦甸市| 温泉县| 钦州市| 政和县| 岗巴县| 罗田县| 宁德市| 美姑县| 澎湖县| 玉林市| 东光县| 淮滨县| 六枝特区| 都昌县| 花莲市| 冷水江市| 宜昌市| 陆河县| 昌黎县| 家居| 连云港市| 澄迈县| 乌拉特中旗| 抚松县| 司法| 图们市| 恭城| 环江| 天柱县| 克拉玛依市| 延寿县| 盱眙县| 绍兴市| 闽侯县| 疏附县|