0

我有一个与此类似的 Javascript 对象:

var MyClass;
MyClass = (function() {

    // private
    var $elems;

    // constructor
    function MyClass(selector) {
        $elems = $(selector);
        $elems.change(myEventHandler(e));
    }

    // event handler
    function myEventHandler(e) {
        var isSelected = ($(e.target).attr('checked') == 'checked');
        if (isSelected) {
            alert('You selected me');
        }
    }

    return MyClass;

})();

我在我的 html 文档中调用这个类,如下所示:

$(function(){ 

    var myClass; 
    myClass = new MyClass(".MySelector");

});

这给了我错误:

Uncaught ReferenceError: e is not defined MyClassJsFile.js:17
    MyClass MyClassJsFile.js:17
    (anonymous function) Step3:36
    f.extend._Deferred.e.resolveWith jquery.min.js:16
    e.extend.ready jquery.min.js:16
    c.addEventListener.B

我以为我在构造函数的这一行中将事件对象传递给事件处理程序:

$elems.change(myEventHandler(e));

在这种情况下如何正确传递事件?

4

2 回答 2

4

您正在使用未定义的变量调用事件处理程序。事件处理程序是函数,因此只需传递函数引用而不调用它:

$elems.change(myEventHandler);
于 2012-08-27T21:55:18.220 回答
2

您可以使用:

$elems.change(myEventHandler);  // or $elems.on('change', myEventHandler) in 1.7+

只是将引用传递给正确的处理程序。因为它是您立即调用处理程序,然后尝试将(不存在的)返回值绑定到change处理程序。

顺便说一句,您对选定框的检查过于复杂。你应该可以写:

var isSelected = this.checked;

基于 jQuery 将设置this为实际更改的 DOM 元素,您可以立即检查其布尔checked属性。

于 2012-08-27T21:57:26.400 回答