【问题标题】:Use addEventListener on a class not working在不工作的类上使用 addEventListener
【发布时间】:2015-07-15 13:36:58
【问题描述】:

我正在尝试在 var 上使用 addEventListenergetElementById 将我的脚本转换为 getElementByClassName 但这不起作用。如何解决?

查看我的代码

Javascript:

var input = document.getElementByClassName('myClass');

_slider.noUiSlider.on('update', function( values, handle ) {

    var value = values[handle];

    if ( handle ) {
        input.value = Math.round(value);
});

input.addEventListener('change', function(){
    _slider.noUiSlider.set([null, this.value]);
}, false);

HTML:

<input type="number" class="myClass">

如果我发现我的 div 带有 ID,但不能使用 CLASS,则此脚本可以完美运行。

【问题讨论】:

    标签: javascript javascript-events


    【解决方案1】:

    没有 getElementByClassName。有 getElementsByClassName 返回一个集合。如果只有一个,则选择第一个索引。

    var input = document.getElementsByClassName('myClass')[0];
    

    其他选项是 querySelector

    var input = document.querySelector('.myClass');
    

    我的猜测是,您不仅需要一个元素,而且还需要多个元素,而不是循环遍历集合。

    var inputs = document.getElementsByClassName('myClass');
    //or
    //var inputs = document.querySelectorAll('.myClass');
    for( var i=0; i<inputs.length; i++){
        inputs[i].addEventListener("click", function() { console.log(this); } );
    }
    

    【讨论】:

    • 谢谢你的回答,我已经尝试过 var input = document.querySelector('.myClass');但我只为一流的元素工作,我也尝试使用 querySelectorAll 但这不起作用
    • 那你的问题是什么?如果您有多个元素,则需要遍历该集合。没有批量添加事件
    • 你知道另一种使用 jquery 的方法吗?我尝试使用 .class() 但也没有用,M 约束是 grunt 限制循环中函数的使用,因为这不是一个好习惯
    • 如果你有 jQuery,你可以使用 jQuery。 $(".myClass").on("click", function(){}); 在引擎盖下它做同样的事情。您需要使用循环将事件添加到多个事物。这就是它的工作原理。没有批处理事件。您可以使用事件委托来检查事件是否是您要监视的元素。 $(document).on("click", ".myClass", function(){});
    • 谢谢大家,最后我换用ID返回的方式,很抱歉浪费了你的时间。问候 - - - - 威廉 R
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多