函数仅适用于 getElementById

Function only works with getElementById

我有附加事件的功能:

function addEvent(object, type, callback) {
    if (object == null || typeof(object) == 'undefined') return;
    if (object.addEventListener) {
        object.addEventListener(type, callback, false);
    } else if (object.attachEvent) {
        object.attachEvent("on" + type, callback);
    } else {
        object["on"+type] = callback;
    }
};

还有一个用于测试的小按钮:

<a href="#" class="btn btn-primary btn-toggle" id="btn-toggle-action">Toggle</a>

我试着调用它,但我看到了:

addEvent(document.getElementById('btn-toggle-action'), 'click', function(e) {}); //WORKS

addEvent(document.getElementByClassName('btn-toggle'), 'click', function(e) {}); //DON'T WORK

addEvent($('.btn-toggle'), 'click', function(e) {}): //DON'T WORK

addEvent($('#btn-toggle-action'), 'click', function(e) {}); //DON'T WORK

我想了解为什么它不能适用于所有方法。

可能是document.getElementByClassName('btn-toggle')returns对象数组。需要:

if(typeof object === 'array'){
  for(obj in object){
    ...
  }
}

PS。 $() returns $-对象,但没有 dom-元素。

首先,写入错误:document.getElementByClassName应该是document.getElementsByClassName,因为它select个元素。

jquery select或者与原生不同 select或者,参见 document-getelementbyid-vs-jquery

你可以使用更强大的原生select或者喜欢:

document.querySelector('#btn-toggle-action')

document.querySelectorAll('.btn-toggle')