【问题标题】:attachEvent is not a function - Using Module PatternattachEvent 不是函数 - 使用模块模式
【发布时间】:2013-09-14 20:57:39
【问题描述】:

我正在尝试构建一个 JavaScript 模块以更好地理解该模式。我正在尝试使用 addEventListener 和 attachEvent 将点击事件附加到按钮,但我无法让我的 console.log 注册。

我还收到一条错误消息,提示“TypeError:element.attachEvent 不是函数”

这是我目前拥有的小提琴: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();
})();

【问题讨论】:

    标签: jquery javascript


    【解决方案1】:

    addClick 方法中,参数 element 作为 jQuery 包装元素而不是 dom 元素引用传递,因此它没有像 addEventListenerattachEvent 这样的方法。

    由于element 是一个jQuery 包装元素,您可以使用.on() 来注册事件处理程序。

    var addClick = function(element, evnt, funct) {
        element.on(evnt,  funct)
    }
    

    演示:Fiddle

    【讨论】:

    • 谢谢!过去,当我在元素和 document.getElementById 上使用 ID 时,这已经奏效了。感谢您的精彩解释。
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2020-01-23
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多