jquery中on綁定事件


之前項目中動態創建的標簽元素  在綁定事件的時候  都是無效  無論如何都不能觸發

eg:在頁面加載完成之后   再由腳本動態創建的<div>元素  在綁定事件的時候 例如click事件 

$("div").click(function(alert("aaa")){});

那么動態創建的元素是觸發不了這個事件的

這是就要用到on來綁定事件了。

但是在W3C中並沒有on事件  只有live,delegate 這是由於這里的更新很不及時  ,建議去http://www.runoob.com(菜鳥教程)學習,但是個人感覺 菜鳥上的小錯誤比較多。

on的定義和用法:

on() 方法在被選元素及子元素上添加一個或多個事件處理程序。

自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。該方法給 API 帶來很多便利,我們推薦使用該方法,它簡化了 jQuery 代碼庫。

注意:使用 on() 方法添加的事件處理程序適用於當前及未來的元素(比如由腳本創建的新元素)。但是on事件是1.7之后新增加的  如果引用的是1.9之前的版本  還可以用live和delegate來綁定事件.

live事件在1.9之后被移除了。

自己嘗試了一下   使用1.7之后的 給未來元素添加事件 使用on並不能觸發。(放在下一篇進行解答)

提示:如需移除事件處理程序,請使用 off() 方法。所有off也是1.9之后出現的。

提示:如需添加只運行一次的事件然后移除,請使用 one() 方法。

另外附加下:click,bind(“click”),live,delegate的區別:

1、click()與bind()

  1).click()

    在jqeury事件處理API中,bind()是其API基礎。click(),mouseover(),mousermove等來處理事件,真正起作用的是bind()。而這些方法都只是輔助作用(別名函數),簡化使用。他們都只有一個參數(觸發事件時執行的回調函數).

  2).bind()

    bind()能更好的控制事件處理函數中的處理過程,且它可以一次綁定多個事件(事件名作為第一個參數,多個事件用空格分開,eg:bind('click contains',function(){})  鼠標左右點擊事件 )

 

所有實用bind()或者click(),mouserover()綁定的事件都可以使用unbind()方法解除綁定

 

2、live()

  與bind()作用基本一樣。

  最重要區別:live()可以將事件綁定到當前和將來的元素(eg:為id=zy元素綁定點擊事件,而當你用js動態生成一個節點並插入到dom文檔結構中時,如果你是用bind()綁定的,怎么新插入的節點將不會有該bind綁定事件。而live()則可以);

  缺點: 無法用於鏈式結構。

      eg:  $('.class').live('click',function(){  })     正確寫法

         $('.class').find('span').live('click',function(){  })   錯誤寫法  無效

  live()綁定的事件可用 die()方法解除綁定。

3、delegate()

  與live()作用基本一樣,但是解決live缺點。它通過將選擇器內的上下文作為第一個參數來解決live問題(也就是delegate得第一個參數你可以當作是一個選擇元素所用)。

  eg. $('.class').delegate('span','mouseover',fucntion(){  })    為class為class的元素下的所有span標簽綁定mouseover事件。

  通過delegate()綁定的事件可通過undelegate()方法解除處理函數的綁定。

 

PS:bind,delegate,live都可以綁定多個事件,多個事件效果一樣:

$("div").bind("click mouseout", function() {
     $("#aa").after("<span>aaa </sapn>")
 });

觸發不同效果:

$("div").bind({
       click:function(){alert(1)},
       mouseout:function(){alert(2)}
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM