我有一个类似于此的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));
在这种情况下如何正确传递事件?
答案 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
属性。