模仿jQuery的原生JavaScript方法.click()

时间:2014-06-14 15:53:05

标签: javascript event-handling

我最近意识到在学习使用jQuery编写JavaScript时,我学习了JS语法,但我从未真正学过JS。所以这里的项目是仅使用本机JavaScript来模仿jQuery方法。

我开始使用全局窗口对象的函数,它返回一组我常用的方法:

window.iq = (function(){
    return {

    id: function(id) {
            return document.getElementById(id);
    },

    // Several other similar methods
})();

所以,现在我可以像这样调用那个方法:

iq.id('elementID') //and so forth

我在编写一个模仿jQuery .click()的方法时遇到了麻烦。我可以将一个点击处理程序附加到一组元素上,如下所示:

[].forEach.call(iq.selAll('a'), function(el) { // selAll is the short version of document.querySelectorAll()
    el.addEventListener('click', function(){
        // do stuff
    });

我无法弄清楚如何编写一个方法来执行该操作,因此每次我想在元素或元素集上触发click事件时,我都可以写:

iq.click('element', function(){
    // do stuff
});

以下是我的非工作尝试:

click: function(el) {
    return [].forEach.call(iq.selAll(el), function(el) {
        el.addEventListener('click');
    });
}

与往常一样,我非常感谢任何建议或指导。

1 个答案:

答案 0 :(得分:2)

您的代码缺少click方法的第二个参数,即实际的处理函数:

click: function(el, handler) {
    return [].forEach.call(iq.selAll(el), function(el) {
        el.addEventListener('click', handler, false);
    });
}