新增jquery物件到dom中時事件失效
阿新 • • 發佈:2020-12-17
技術標籤:Javajsjquerydomjavascript
1jQuery實現同一物件增刪
<select id="opt">
<option>北京</option>
<option>深圳</option>
<option>上海</option>
<option>廣州</option>
</select>
<script type="text/javascript">
let node = $("#opt");// 這是全域性select物件
let nodeParent = node.parent();
function show(){
console.log(node.val());
// 刪除node物件(select框),在把node物件新增進去
nodeParent.empty();
nodeParent.append(node);
}
node.blur(show);//繫結事件
// node.on("blur",show); //一樣無效
</script>
2.原因是jQuery物件在插入到dom中時,事件會丟失
2.1 初始時在控制檯中看到node存在事件
2.2 執行一次後,node物件變成undefined
簡單來說就是,如果有一個jQuery物件中綁定了事件,這個物件在新增到dom中時,事件會丟失。
3.但如果是JS實現的話,是沒有問題的
<body>
<select id="opt">
<option>北京</option>
<option>深圳</option>
<option> 上海</option>
<option>廣州</option>
</select>
<script type="text/javascript">
let node = document.getElementById("opt");
function show(){
console.log(node.value);
document.body.removeChild(node);
document.body.appendChild(node);
}
node.addEventListener("blur",show); //事件持續有用
</script>
事件一直存在,chrome上可以看到
但firfox的控制檯中找不到有關的事件資訊