Javascript 模仿jQuery';s.click()
我最近意识到,在学习使用jQuery编写JavaScript时,我学习了JS语法,但我从未真正学习过JS。因此,这里的项目是仅使用本机JavaScript模拟jQuery方法 我从全局窗口对象的函数开始,该函数返回一组我通常使用的方法: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
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
时才有意义,请阅读