如何访问事件对象?

时间:2012-08-27 21:52:32

标签: javascript jquery javascript-events

我有一个类似于此的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 doc中称这个类为:

$(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));

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

2 个答案:

答案 0 :(得分:4)

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

$elems.change(myEventHandler);

答案 1 :(得分:2)

您可以使用:

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

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

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

var isSelected = this.checked;

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