在没有循环和jQuery的相同类的所有元素上添加Click事件

时间:2017-08-29 10:29:35

标签: javascript events click

我必须编写一个代码,在没有循环和jquery的同一个类的所有输入上运行click事件。

我想出的是:

document.body.addEventListener('click', function (click) {
    if (click.target.className == 'abc') {
        document.frame.screen.value += this.value;
    }
});

并单击“有效”但我得到undefined而不是点击的输入包含的值。

1 个答案:

答案 0 :(得分:1)

  

并点击工作,但我得到了undefined而不是点击输入包含的值。

因为您在获取值时使用了this而不是click.target;你想使用click.target

document.frame.screen.value += click.target.value;
// Here -----------------------^^^^^^^^^^^^
您的处理程序中的

this将为document.body。您在检查课程时正确使用了click.target,但在获取该值时却没有。

一些注意事项:

  • FWIW,事件处理程序中事件参数的通常名称是evente,而不是click
  • 元素可以有多个类,这些类都在className中。 如果可能是您的问题,您可以改为.classList.contains("abc")。 (classList适用于所有现代浏览器,您可以在过时的浏览器上进行填充。)
  • input元素不是问题,但将来如果你想用可以有后代元素的元素来做这件事,你可能需要有一个循环来处理这种可能性点击是在目标元素的后代:

    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