JQuery動(dòng)態(tài)生成的按鈕無法觸發(fā)問題及完美解決方法
起因:
利用JQuery動(dòng)態(tài)添加的按鈕無法通過$(selector).click方法觸發(fā)點(diǎn)擊事件
//在網(wǎng)頁加載完成后動(dòng)態(tài)添加表格
$(function () {
//通過Ajax向后臺請求程序
$.ajax({
method : "post",
url : "all-user",
dataType : "json",
success: function (data) {
const userList = data;
//遍歷結(jié)果集
for (let i = 0; i < userList.length; i++){
let uid = userList[i].uid
let upd = '<button value="'+uid+'" class="upd-btn">修改</button>'
let del = '<button value="'+uid+'" class="del-btn">刪除</button>'
let status = ""
if (userList[i].status == 0){
status = "審核中"
}else if (userList[i].status == 1){
status = "審核通過"
}else if (userList[i].status == 2){
status = "審核被拒絕"
}
//添加模板
let td = "<tr>"+
"<td>#{uid}</td>"+
"<td>#{username}</td>"+
"<td>#{password}</td>"+
"<td>#{status}</td>"+
"<td>#{update}</td>"+
"<td>#{delete}</td>"+
"</tr>"
//填充參數(shù)
td = td.replace(/#{uid}/g,uid)
td = td.replace(/#{username}/g,userList[i].username)
td = td.replace(/#{password}/g,userList[i].password)
td = td.replace(/#{status}/g, status)
td = td.replace(/#{update}/g, upd)
td = td.replace(/#{delete}/g, del)
//.append追加
$("#tb").append(td)
}
}
})
//編寫按鈕的點(diǎn)擊事件,使用.click()方法,按鈕點(diǎn)擊后沒有反應(yīng)
$(".del-btn").click(function () {
alert(this.value)
})
})
原因:
append中的節(jié)點(diǎn)是在整個(gè)文檔加載完之后開始添加的,
因此頁面不會為append的元素初始化添加點(diǎn)擊事件
解決方法:
使用$(document).on()方法添加點(diǎn)擊事件
$(document).on("click",".del-btn",function (){
})補(bǔ)充:jquery中動(dòng)態(tài)新增的元素節(jié)點(diǎn)無法觸發(fā)事件解決辦法
在使用jquery中動(dòng)態(tài)新增的元素節(jié)點(diǎn)時(shí)會發(fā)現(xiàn)添加的事件是無法觸發(fā)的,我們下面就為各位來詳細(xì)的介紹此問題的解決辦法.
比如做一個(gè)ajax讀取留言列表的時(shí)候,每條留言后面有個(gè)回復(fù)按鈕,class為“reply”,如果你用的是$(".reply").click(function(){ //do something... }),想必后面通過ajax加載進(jìn)來的列表中的回復(fù)按鈕,點(diǎn)擊事件會失效。
其實(shí)最簡單的方法就是直接在標(biāo)簽中寫onclick="",但是這樣寫其實(shí)是有點(diǎn)low的,最好的方式還是通過給類名綁定一個(gè)click事件。
解決jquery中動(dòng)態(tài)新增的元素節(jié)點(diǎn)無法觸發(fā)事件的問題有兩種解決方法,如下:
方法一:使用live
live()函數(shù)會給被選的元素綁定上一個(gè)或者多個(gè)事件處理程序,并且規(guī)定當(dāng)這些事件發(fā)生時(shí)運(yùn)行的函數(shù)。通過live()函數(shù)適用于匹配選擇器的當(dāng)前及未來的元素。比如,通過腳本動(dòng)態(tài)創(chuàng)建的元素。
實(shí)現(xiàn)如下:
$('.liLabel').live('click', function(){
alert('OK');
});方法二:使用on
可以通過on方法綁定事件,可以綁定到它的父級或者body中,實(shí)現(xiàn)如下:
$("#ulLabel").on('click','.liLabel',function(){
alert('OK')
});
或者:
$("body").on('click','.liLabel',function(){
alert('OK')
});到此這篇關(guān)于JQuery動(dòng)態(tài)生成的按鈕無法觸發(fā)問題與解決方法的文章就介紹到這了,更多相關(guān)JQuery動(dòng)態(tài)生成的按鈕無法觸發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jquery下EasyUI組件中的DataGrid結(jié)果集清空方法
要求選擇“地區(qū)”及“代維公司”后,刷新第一個(gè)DataGrid框體,下面為大家介紹下如何清空J(rèn)query下EasyUI組件中的DataGrid結(jié)果集2014-01-01
Jquery根據(jù)瀏覽器窗口改變調(diào)整大小的方法
下面小編就為大家?guī)硪黄狫query根據(jù)瀏覽器窗口改變調(diào)整大小的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
jquery 獲取json數(shù)據(jù)實(shí)現(xiàn)代碼
jquery json數(shù)據(jù)獲取代碼。2009-04-04

