我已经知道jQuery的事件委托。然而,如果没有jQuery,我如何使用纯Javascript做同样的事情呢。
虽然我在body或top元素(div)上附加了Change
事件,但当body或top元素中的输入元素的值更改时,不会触发Change
事件...
我该怎么做呢?
让我们定义您的事件函数
:
function(event) doSomething{
//Your code
}
让我们在您的正文中获取所有
:输入
标记
var inputs = document.getElementsByTagName('input');
现在,让我们迭代它们并附加事件:
for (var inputIndex = 0; inputIndex < inputs.length; inputIndex++) {
inputs.addEventListener('change', doSomething);
}
您可以只在一个元素上侦听事件(在本例中为elSelector
),然后仅在实际目标适合该元素中的选择器时执行事件。
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>
捕获和冒泡允许我们实现一种被称为 事件委托 的强大的事件处理模式。 这个想法是,如果我们有许多以类似方式处理的元素,那么就不必为每个元素分配一个处理程序 —— 而是将单个处理程序放在它们的共同祖先上。 在处理程序中,我们获取 event.target 以查看事件实际发生的位置并进行处理。 让我们看一个示例 —— 反映中国古代哲学的 八卦图。 如下所示:在新窗口中打开 在沙箱中打开 其 HTML 如
本文向大家介绍C#中的委托是什么?事件是不是一种委托?事件和委托的关系。相关面试题,主要包含被问及C#中的委托是什么?事件是不是一种委托?事件和委托的关系。时的应答技巧和注意事项,需要的朋友参考一下 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的指针。 委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实
主要内容:为什么要使用事件委托,事件委托实现原理,事件委托的优点,总结利用 JS 事件冒泡动态为元素绑定事件的方法称为事件委托(Event Delegation,也称为“事件代理”),是 JavaScript 中最热门的技术之一。 事件委托就是把原本需要绑定在子元素上的事件(onclick、onkeydown 等)委托给它的父元素,让父元素来监听子元素的冒泡事件,并在子元素发生事件冒泡时找到这个子元素。 举个简单的例子,整个宿舍的同学都需要去取快递,一种方法是让他们
本文向大家介绍事件委托的优点?相关面试题,主要包含被问及事件委托的优点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 把一个元素响应事件(click、keydown......)的函数委托到另一个元素; 优点:减少内存消耗、动态绑定事件。
问题内容: 我有一个输入,其类型设置为隐藏,我需要将其类型更改为文本。似乎无法弄清楚这一点,或者jQuery是否可行 问题答案: 使用jQuery 1.4,您可以在分离输入时更改其类型。
实现on,off的事件委托! 我们能根据之前的思路,利用同样的方法实现一个事件委托. 先来看看流程图 然后先看看结果是如何,毕竟流程图看的也不一定能懂。 最后我们再来看看代码 Kodo.deleEvents = []; //事件委托存放的事件 Kodo.deleId = 0; //事件委托的唯一标识 on: function(type, selector, fn) { if (typeo