1. 程式人生 > 其它 >新增jquery物件到dom中時事件失效

新增jquery物件到dom中時事件失效

技術標籤: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的控制檯中找不到有關的事件資訊
在這裡插入圖片描述