gpt4 book ai didi

javascript - 如何在 body 的输入元素上委托(delegate) 'change' 事件?

转载 作者:行者123 更新时间:2023-11-29 16:02:08 24 4
gpt4 key购买 nike

我已经知道 jQuery 的事件委托(delegate)。但是,如果没有 jQuery,我如何使用纯 Javascript 做同样的事情。

虽然我在 body 或顶部元素 (div) 上附加了 change 事件,但是当 body 或顶部元素中的 input 元素的值更改时,不会触发 change 事件。 ..

我该怎么做?

最佳答案

您可以只监听一个元素上的事件(在本例中为 elSelector),然后仅当实际目标适合该元素中的 selector 时才执行该事件。

function on(elSelector, eventName, selector, fn) {
var element = document.querySelector(elSelector);

element.addEventListener(eventName, function(event) {
var possibleTargets = element.querySelectorAll(selector);
var target = event.target;

for (var i = 0, l = possibleTargets.length; i < l; i++) {
var el = target;
var p = possibleTargets[i];

while(el && el !== element) {
if (el === p) {
return fn.call(p, event);
}

el = el.parentNode;
}
}
});
}

在下面的示例中,您可以看到它也适用于动态元素!

on("#inputs", "change", ".event", (target, evt) => console.log(target.target));




function on(elSelector, eventName, selector, fn) {
var element = document.querySelector(elSelector);

element.addEventListener(eventName, function(event) {
var possibleTargets = element.querySelectorAll(selector);
var target = event.target;

for (var i = 0, l = possibleTargets.length; i < l; i++) {
var el = target;
var p = possibleTargets[i];

while (el && el !== element) {
if (el === p) {
return fn.call(p, event);
}

el = el.parentNode;
}
}
});
}

/** random code for the button to add more inputs **/

let i = 7;

document.querySelector("#b").addEventListener("click", () => {
document.querySelector("#inputs").innerHTML += i + ` <input type="text" class="event"> <br>`;
i++;
});
<div id="inputs">
1 <input type="text" class="event"> <br>
2 <input type="text" class=""> <br>
3 <input type="text" class="event"> <br>
4 <input type="text" class=""> <br>
5 <input type="text" class="event"> <br>
6 <input type="text" class=""> <br>
</div>

<br><br>
<button id="b">Add another input</button>

关于javascript - 如何在 body 的输入元素上委托(delegate) 'change' 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51419014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com