Javascript 模仿jQuery';s.click()

Javascript 模仿jQuery';s.click(),javascript,event-handling,Javascript,Event Handling,我最近意识到,在学习使用jQuery编写JavaScript时,我学习了JS语法,但我从未真正学习过JS。因此,这里的项目是仅使用本机JavaScript模拟jQuery方法 我从全局窗口对象的函数开始,该函数返回一组我通常使用的方法: window.iq = (function(){ return { id: function(id) { return document.getElementById(id); }, // Severa

我最近意识到,在学习使用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的
的方法时遇到问题。单击()。我可以将单击处理程序附加到一组元素,如下所示:

[].forEach.call(iq.selAll('a'), function(el) { // selAll is the short version of document.querySelectorAll()
    el.addEventListener('click', function(){
        // do stuff
    });
我还没有弄清楚如何编写一个方法来实现这一点,因此每次我想在一个元素或一组元素上触发一个单击事件时,我都可以编写:

iq.click('element', function(){
    // do stuff
});
以下是我在这方面的非工作尝试:

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

一如既往,我非常感谢您的建议或指导。

您的代码缺少
单击方法的第二个参数,这是实际的处理程序函数:

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

谢谢因此,当我调用
iq时,处理程序就是函数{
?处理程序总是一个函数吗?另外,根据MDN,第三个参数是
useCapture
,它默认为false。即使在阅读文档之后,我也不完全确定它可能用于什么:-0是的,处理程序总是一个函数。尽管您不需要传递函数表达式(
function(){…}
thing),您还可以传递变量或任何其他生成函数的内容(
handler
在我的回答中是一个变量)。
useCapture
标志只有在设置为
true
时才有意义,请阅读