當(dāng)你在給一個元素綁定事件時,這個元素必須存在,否則就綁定失敗。很明顯,$(".sb1 p")在事前是不存在的(是通過點擊按鈕才添加進(jìn)去的),所以事件無法綁定,點擊也就無效了。解決辦法一是動態(tài)綁定事件,就是在點擊按鈕添加p的時候一并把事件綁定進(jìn)去;方法二就是采用事件委托,把p的事件冒泡給父元素.sb1,即 $(".sb1").on("click","p",function(){...,這樣的話即使sb1中是空的也不妨礙事件綁定了(新添加的p也會自動觸發(fā)click事件)。根據(jù)你這代碼的情況,建議使用方法二。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)市中免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
events:一個或多個用空格分隔的事件類型和可選的命名空間,如"click"或"keydown.myPlugin" 。
selector:一個選擇器字符串用于過濾器的觸發(fā)事件的選擇器元素的后代。如果選擇器為null或省略,當(dāng)它到達(dá)選定的元素,事件總是觸發(fā)。
data:當(dāng)一個事件被觸發(fā)時要傳遞event.data給事件處理函數(shù)。
fn:該事件被觸發(fā)時執(zhí)行的函數(shù)。 false 值也可以做一個函數(shù)的簡寫,返回false。
當(dāng)?shù)诙€參數(shù)'selector'為null時,on()和bind()其實在用法上基本上沒有任何區(qū)別了,所以我們可以認(rèn)為on()只是比bind()多了一個可選的'selector'參數(shù),所以on()可以非常方便的替換掉bind()
在 1.4之前相信大家非常喜歡使用live(),因為它可以把事件綁定到當(dāng)前以及以后添加的元素上面,當(dāng)然在1.4之后delegate()也可以做類似的事情了。live()的原理很簡單,它是通過document進(jìn)行事件委派的,因此我們也可以使用on()通過將事件綁定到document來達(dá)到 live()一樣的效果。
1、live()寫法
2、on()寫法
這里的關(guān)鍵就是第二個參數(shù)'selector'在起作用了。它是一個過濾器的作用,只有被選中元素的后代元素才會觸發(fā)事件。
delegate() 是1.4引入的,目的是通過祖先元素來代理委派后代元素的事件綁定問題,某種程度上和live()優(yōu)點相似。只不過live()是通過document元素委派,而delegate則可以是任意的祖先節(jié)點。使用on()實現(xiàn)代理的寫法和delegate()基本一致。
1、delegate()的寫法
2、on()寫法
貌似第一個和第二個參數(shù)的順序顛倒了一下,別的基本一樣。
jQuery中用on來綁定事件,常用寫法
兩種寫法哪個更好?
1. $(document).on 將事件委托document, $('#idname').on 將事件綁定到.className元素上。每次document有點擊動作,瀏覽器都會判斷當(dāng)前點擊的對象。如果匹配再決定要不要執(zhí)行,多了個判斷環(huán)節(jié)。JS渲染效率很高,所以此異同基本可以忽略。
2. $("className").on 為onclick綁定,只有在頁面onload時執(zhí)行一次。頁面刷新后,新加載的具有className的元素便沒有事件綁定到上面了。相反$(document).on這種方法會刷新和重新賦予綁定操作,所以一定程度上更為全面。
on指的是事件委托,舉個例子,
$(document).on("click", ".ontest", function () {
//......
});
假設(shè)你的.ontest一開始不存在DOM結(jié)構(gòu)當(dāng)中,也就是html里面,如果你直接click(function () {});的話,事件是無法成功綁定的,而用on委托給document的話,在事件冒泡的時候,就可以成功出發(fā)綁定的事件。
.on()方法事件處理程序到當(dāng)前選定的jQuery對象中的元素。
.on( events [, selector ] [, data ], handler(eventObject) )
events:類型: String
一個或多個空格分隔的事件類型和可選的命名空間,或僅僅是命名空間,比如"click", "keydown.myPlugin", 或者 ".myPlugin"。
selector:類型: String
一個選擇器字符串,用于過濾出被選中的元素中能觸發(fā)事件的后代元素。如果選擇器是 null 或者忽略了該選擇器,那么被選中的元素總是能觸發(fā)事件。
data:類型: Anything
當(dāng)一個事件被觸發(fā)時,要傳遞給事件處理函數(shù)的event.data。
handler(eventObject):類型: Function()
事件被觸發(fā)時,執(zhí)行的函數(shù)。若該函數(shù)只是要執(zhí)行return false的話,那么該參數(shù)位置可以直接簡寫成 false。
概述
1、#Grid1Table不是#conut的父節(jié)點,p標(biāo)簽是#logout的父節(jié)點
2、代碼寫法:
$('p').on('click', '#count', function() {
//function code here.
});
解析
1、p包裹a標(biāo)簽(id = logout),所以logout的父節(jié)點(父標(biāo)簽)為p(沒有標(biāo)注id或者class)
pa href='#' id='logout'【退出】/a/p
2、$("#logout").on('click',function() 方法要求參數(shù)為非隨動變量(全局變量),所以#logout為不可行參數(shù),且由于代碼沒有貼全所以這里我先斷定#Grid1Table為非父節(jié)點,而p為#logout父節(jié)點,所以這里可以改成:
$('p').on('click', '#count', function() {
//function code here.
});
拓展內(nèi)容
juqery on()方法詳解
定義和用法
on() 方法在被選元素及子元素上添加一個或多個事件處理程序。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。該方法給 API 帶來很多便利,我們推薦使用該方法,它簡化了 jQuery 代碼庫。
注意:使用 on() 方法添加的事件處理程序適用于當(dāng)前及未來的元素(比如由腳本創(chuàng)建的新元素)。
提示:如需移除事件處理程序,請使用?off()?方法。
提示:如需添加只運行一次的事件然后移除,請使用?one()?方法。
語法
$(selector).on(event,childSelector,data,function)
參數(shù)
event ? ?????????????必需。規(guī)定要從被選元素移除的一個或多個事件或命名空間。由空格分隔多個事件值,也可以是數(shù)組。必須是有效的事件。 ?
childSelector ? ?可選。規(guī)定只能添加到指定的子元素上的事件處理程序(且不是選擇器本身,比如已廢棄的 delegate() 方法)。 ?
data ? ?????????????? 可選。規(guī)定傳遞到函數(shù)的額外數(shù)據(jù)。 ?
function ? ?????????可選。規(guī)定當(dāng)事件發(fā)生時運行的函數(shù)。 ?
網(wǎng)頁題目:jquery事件on,jQuery事件on方法
文章源于:http://chinadenli.net/article0/dseidoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、做網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站建設(shè)、App開發(fā)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)