Javascript 在不带循环和jQuery的同一类的所有元素上添加Click事件

Javascript 在不带循环和jQuery的同一类的所有元素上添加Click事件,javascript,events,click,Javascript,Events,Click,我必须编写一个代码,在没有循环和jquery的情况下,对具有相同类的所有输入运行click事件 我想到的是: document.body.addEventListener('click', function (click) { if (click.target.className == 'abc') { document.frame.screen.value += this.value; } }); 单击可以工作,但我得到了未定义的值,而不是单击输入包含的值 单

我必须编写一个代码,在没有循环和jquery的情况下,对具有相同类的所有输入运行click事件

我想到的是:

document.body.addEventListener('click', function (click) {
    if (click.target.className == 'abc') {
        document.frame.screen.value += this.value;
    }
});
单击可以工作,但我得到了未定义的值,而不是单击输入包含的值

单击可以工作,但我得到了未定义的值,而不是单击输入包含的值

因为您在获取值时使用了此选项,而不是单击.target;您想使用click.target:

处理程序中的该文件将是document.body。您在检查类时正确使用了click.target,但在获取值时没有正确使用

一些注意事项:

FWIW,事件处理程序中事件参数的常用名称是event或e,而不是click。 元素可以有多个类,这些类都将位于className中。如果这对您来说是一个可能的问题,您可以改为查看.classList.containsabc。在所有现代浏览器上都可用,您可以在过时的浏览器上多填充它。 这对于输入元素来说不是问题,但在将来,如果您希望对可以包含子元素的元素执行此操作,则可能需要有一个循环来处理单击目标元素的子元素的可能性:

var node = event.target;
while (!node.classList.contains("abc")) {
    if (node === this) {
        return; // The click didn't pass through a matching element
    }
    node = node.parentNode;
}
// Use it here

这将是document.body,因此值将不存在。非常感谢!我是一个学javascript的幼儿,不完全理解DOM:
var node = event.target;
while (!node.classList.contains("abc")) {
    if (node === this) {
        return; // The click didn't pass through a matching element
    }
    node = node.parentNode;
}
// Use it here