jquery - attachEvent 不是一个函数——使用模块模式

标签 jquery javascript

我正在尝试构建一个 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/

相关文章:

javascript - 有没有办法将javascript结果打印到调用javascript函数的div中?

javascript - 调用 AJAX onkeyup 事件触发器。使用定时器和中止来提高性能?

javascript - Bootstrap 按显示事件的类名查找事件选项卡内的元素。

javascript - 我如何使用 datepicker jquery 突出显示特定日期

javascript - Jquery 使用选择值更改脚本标签的 src

javascript - 当 IMAGE 被删除时,将 div 中的值设置为隐藏输入

javascript - 如何使用 javascript 或 jquery 动态添加 SVG 图形?

javascript - 如何使用表格列作为 slider

javascript - 为最后创建的 JavaScript 类提供随机数

javascript - 如何在通过 AJAX 插入内容后获取元素的高度?