我正在尝试构建一个 JavaScript 模块以更好地理解该模式。我正在尝试使用 addEventListener 和 attachEvent 将点击事件附加到按钮,但我无法让我的 console.log 注册。
我也收到一条错误消息“TypeError: element.attachEvent is not a function”
这是我现在的 fiddle :http://jsfiddle.net/rL5xp/
这是 HTML:
<p>The color is <span class="js-print">green</span>.</p>
<button class="js-button">Click Here</button>
这是 JavaScript:
var settings = [
{color : 'green'},
{color : 'blue'},
{color : 'red'}
];
var $ele = {
span : $('.js-print'),
button : $('.js-button')
};
var ChangeColor = (function(s, $element) {
var init = function() {
bindBrowserActions();
}
var bindBrowserActions = function() {
addClick($element.button, 'click', function() {
console.log('click');
});
}
var addClick = function(element, evnt, funct) {
if (element.addEventListener) {
return element.addEventListener(evnt, funct, false);
}
//addEventListener is not supported in <= IE8
else {
return element.attachEvent('on'+evnt, funct);
}
}
return {
init : init
}
})(settings, $ele);
(function() {
ChangeColor.init();
})();
最佳答案
在addClick
方法参数element
作为 jQuery 包装器元素传递,而不是 dom 元素引用,因此它没有像 addEventListener
这样的方法。或 attachEvent
.
自 element
是一个 jQuery 包装器元素,您可以使用 .on()注册事件处理程序。
var addClick = function(element, evnt, funct) {
element.on(evnt, funct)
}
演示:Fiddle
关于jquery - attachEvent 不是一个函数——使用模块模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801964/