jQuery動(dòng)態(tài)添加元素后元素注冊(cè)事件失效解決
前言:
近日丟醬在學(xué)jQuery,在學(xué)習(xí)的時(shí)候遇到了一個(gè)問(wèn)題,雖然最后解決了,但是丟醬覺(jué)得要把這個(gè)問(wèn)題解決的方法記錄下來(lái),這樣有小伙伴遇到同樣的問(wèn)題就不會(huì)跟我一樣解決好久啦。
我先貼一段正常邏輯的代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="jquery.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
}
button {
position: relative;
left: 712px;
top: 97px;
}
.content {
width: 500px;
height: 30px;
line-height: 30px;
border: 1px solid #bbb;
margin: 100px auto;
border-collapse: collapse;
}
th {
background-color: rgb(27, 126, 184);
color: #fff;
border: 1px solid #bbb;
}
td {
border: 1px solid #bbb;
}
</style>
</head>
<body>
<button>添加數(shù)據(jù)</button>
<table class="content" align="center">
<tr>
<th style="font-weight: 700;">課程名稱</th>
<th style="font-weight: 700;">所屬學(xué)院</th>
<th style="font-weight: 700;">已學(xué)會(huì)</th>
</tr>
</table>
<script>
$(function() {
var t1 = $('<tr align="center"><td>javaScript</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="del">GET</a></td></tr>');
var t2 = $('<tr align="center"><td>css</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
var t3 = $('<tr align="center"><td>html</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
var t4 = $('<tr align="center"><td>jQuery</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
$('button').on('click', function() {
// console.log($('table tr'));
if ($('table tr').length === 1) {
$('table').append(t1);
console.log($(".del"));
// console.log($('table tr').length);
} else if ($('table tr').length === 2) {
$('table').append(t2);
} else if ($('table tr').length === 3) {
$('table').append(t3);
} else if ($('table tr').length === 4) {
$('table').append(t4);
} else {
return false;
}
});
// $("table a").on('click', function() {
// $('table').children('tr').remove();
// })
$('tr').on('click', 'a', function() {
console.log(11);
$(this).parents('tr').remove();
})
})
</script>
</body>
</html>前端頁(yè)面操作流程:
- 1.先點(diǎn)擊“添加數(shù)據(jù)”按鈕,把a(bǔ)標(biāo)簽動(dòng)態(tài)生成出來(lái)。
- 2.再點(diǎn)擊a標(biāo)簽(GET),查看控制臺(tái)。
結(jié)果:控制臺(tái)啥也沒(méi)有輸出
因?yàn)檫@樣寫(xiě)是有問(wèn)題的。所有需要修改一下。我先把我修改后的代碼貼出來(lái)。后面解釋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="jquery.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
}
button {
position: relative;
left: 712px;
top: 97px;
}
.content {
width: 500px;
height: 30px;
line-height: 30px;
border: 1px solid #bbb;
margin: 100px auto;
border-collapse: collapse;
}
th {
background-color: rgb(27, 126, 184);
color: #fff;
border: 1px solid #bbb;
}
td {
border: 1px solid #bbb;
}
</style>
</head>
<body>
<button>添加數(shù)據(jù)</button>
<table class="content" align="center">
<tr>
<th style="font-weight: 700;">課程名稱</th>
<th style="font-weight: 700;">所屬學(xué)院</th>
<th style="font-weight: 700;">已學(xué)會(huì)</th>
</tr>
</table>
<script>
$(function() {
var t1 = $('<tr align="center"><td>javaScript</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="del">GET</a></td></tr>');
var t2 = $('<tr align="center"><td>css</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
var t3 = $('<tr align="center"><td>html</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
var t4 = $('<tr align="center"><td>jQuery</td><td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td><td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >GET</a></td></tr>');
$('button').on('click', function() {
// console.log($('table tr'));
if ($('table tr').length === 1) {
$('table').append(t1);
console.log($(".del"));
// console.log($('table tr').length);
} else if ($('table tr').length === 2) {
$('table').append(t2);
} else if ($('table tr').length === 3) {
$('table').append(t3);
} else if ($('table tr').length === 4) {
$('table').append(t4);
} else {
return false;
}
});
// $("table a").on('click', function() {
// $('table').children('tr').remove();
// })
$('.content').on('click', 'a', function() {
console.log(11);
$(this).parents('tr').remove();
})
})
</script>
</body>
</html>前端頁(yè)面操作流程:
- 1.先點(diǎn)擊“添加數(shù)據(jù)”按鈕,把a(bǔ)標(biāo)簽動(dòng)態(tài)生成出來(lái)。
- 2.再點(diǎn)擊a標(biāo)簽(GET),查看控制臺(tái)。
**結(jié)果:控制臺(tái)開(kāi)始輸出了 **
開(kāi)始作解釋了。其實(shí)大家可以看出來(lái),這里只有一個(gè)區(qū)別。我把這兩個(gè)貼出來(lái)
// 控制臺(tái)不輸出
// 通過(guò)on事件委派來(lái)給tr里面的a標(biāo)簽添加點(diǎn)擊事件
$('tr').on('click', 'a', function() {
console.log(11);
$(this).parents('tr').remove();
});
// 控制臺(tái)輸出
$('.content').on('click', 'a', function() {
console.log(11);
$(this).parents('tr').remove();
});第一個(gè)里,我們是事件委派對(duì)a標(biāo)簽的元素作單擊事件。但是這種jquery獲取不到動(dòng)態(tài)添加元素的。
方案解釋:
on雖然可以給未來(lái)動(dòng)態(tài)創(chuàng)建的元素綁定事件,但是要先獲取已擁有的父級(jí)元素。然后才能再獲取動(dòng)態(tài)元素。
就是相當(dāng)于說(shuō),給父元素添加一個(gè)事件(該事件類型和動(dòng)態(tài)元素想要實(shí)現(xiàn)的事件類型一樣)
所以這里可以得到:
<table class="content" align="center">
<tr>
<th style="font-weight: 700;">課程名稱</th>
<th style="font-weight: 700;">所屬學(xué)院</th>
<th style="font-weight: 700;">已學(xué)會(huì)</th>
</tr>
// 動(dòng)態(tài)添加的元素
<tr align="center">
<td>javaScript</td>
<td>傳智播客-前端與移動(dòng)開(kāi)發(fā)學(xué)院</td>
<td><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="del">GET</a></td>
</tr>
</table>.content是a標(biāo)簽的父級(jí)
$('.content').on('click', 'a', function() {
console.log(11);
$(this).parents('tr').remove();
})只要記住,在動(dòng)態(tài)生成的元素中,不能直接指定其事件。只能其父標(biāo)簽的事件后,過(guò)濾指定特定元素事件。
還有一種寫(xiě)法:直接指定dom的元素事件。這也是可以的。
$(document).on('click',"a",function(){
console.log("22");
})到此這篇關(guān)于jQuery動(dòng)態(tài)添加元素后元素注冊(cè)事件失效解決的文章就介紹到這了,更多相關(guān)jQuery添加元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JQuery事件委托(適用于給動(dòng)態(tài)生成的腳本元素添加事件)
- Jquery 動(dòng)態(tài)添加元素并添加點(diǎn)擊事件實(shí)現(xiàn)過(guò)程解析
- jQuery實(shí)現(xiàn)為動(dòng)態(tài)添加的元素綁定事件實(shí)例分析
- jQuery動(dòng)態(tài)添加元素?zé)o法觸發(fā)綁定事件的解決方法分析
- jQuery如何獲取動(dòng)態(tài)添加的元素
- jQuery給動(dòng)態(tài)添加的元素綁定事件的方法
- Jquery對(duì)新插入的節(jié)點(diǎn) 綁定Click事件失效的解決方法
- jquery動(dòng)態(tài)添加元素事件失效問(wèn)題解決方法
相關(guān)文章
jquery實(shí)現(xiàn)奇偶行賦值不同css值
通常為了讓頁(yè)面呈現(xiàn)的更為美觀,我們喜歡在奇偶行加上不同的顏色2012-02-02
jQuery實(shí)現(xiàn)火車票買票城市選擇切換功能
本文通過(guò)實(shí)例代碼給大家分享了jQuery實(shí)現(xiàn)火車票買票城市選擇切換功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09
動(dòng)態(tài)獲取復(fù)選框checkbox選中個(gè)數(shù)的jquery代碼
這篇文章主要介紹了jquery中動(dòng)態(tài)獲取復(fù)選框checkbox選中的個(gè)數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2013-06-06
jquery實(shí)現(xiàn)在網(wǎng)頁(yè)指定區(qū)域顯示自定義右鍵菜單效果
這篇文章主要介紹了jquery實(shí)現(xiàn)在網(wǎng)頁(yè)指定區(qū)域顯示自定義右鍵菜單效果,涉及jquery鼠標(biāo)點(diǎn)擊及事件綁定等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
jQuery監(jiān)控文本框事件并作相應(yīng)處理的方法
這篇文章主要介紹了jQuery監(jiān)控文本框事件并作相應(yīng)處理的方法,涉及jQuery操作文本框的技巧,需要的朋友可以參考下2015-04-04
jQuery getJSON 處理json數(shù)據(jù)的代碼
Ashx處理程序:如果需要返回json格式的對(duì)象,需要把mime類型設(shè)置為:"application/json"。2010-07-07

