jQuery的.on()
在以前jQuery事件綁定主要分為bind跟live,兩個寫起來差不多,差別如果頁面裡面的DOM是動態產生的話,用bind就會抓不到那些動態產生的DOM,所以我們如果有用到ajax去動態產生DOM的話,就會使用live,不過live因為效能差還有一些其他的問題,所以官網也建議我們不要使用live,而在1.7之後有了.on()可以使用,如果之前有用live,不妨盡量改成.on()吧。
用法跟以前live有些差別,先把live改成on
有一個主要的差別,live是只要直接把事件綁在元素上就可以,可是on要先找到不是動態產生的元素,像下面的,如果tr是動態產生
就要改寫成
不然會綁不到事件
另外也可以帶參數進去。
如果想要用on在不同事件下執行不一樣的效果,比方在動態產生的DOM上,我們還希望他可以在滑入滑出時動態切換class,可以這樣寫:
如果要綁動態的元素,則這樣加
用法跟以前live有些差別,先把live改成on
- .on( events [, selector] [, data], handler(eventObject) )
有一個主要的差別,live是只要直接把事件綁在元素上就可以,可是on要先找到不是動態產生的元素,像下面的,如果tr是動態產生
- $("#dataTable tbody tr").on("click", function(event){
- alert($(this).text());
- });
- $("#dataTable tbody").on("click", "tr", function(event){
- alert($(this).text());
- });
另外也可以帶參數進去。
- function greet(event) { alert("Hello "+event.data.name); }
- $("button").on("click", { name: "Karl" }, greet);
- $("button").on("click", { name: "Addy" }, greet);
如果想要用on在不同事件下執行不一樣的效果,比方在動態產生的DOM上,我們還希望他可以在滑入滑出時動態切換class,可以這樣寫:
- $("div.test").on({
- mouseenter: function(){
- $(this).addClass("inside");
- },
- mouseleave: function(){
- $(this).removeClass("inside");
- }
- });
如果要綁動態的元素,則這樣加
- $("div.test").on({
- mouseenter: function(){
- $(this).addClass("inside");
- },
- mouseleave: function(){
- $(this).removeClass("inside");
- }
- }, "a");
留言