Javascript 通过代码将事件对象传递给函数
我一直在寻找我的问题的答案,但还没有找到类似的答案。本质上,我想调用一个函数,该函数接受一个事件,通常通过单击或其他事件附加到一个元素上,但只需直接调用它 本质上,我知道我可以这样做来调用我的函数(用jQuery编写): 是否有一种直接调用函数的方法Javascript 通过代码将事件对象传递给函数,javascript,function,events,backbone.js,Javascript,Function,Events,Backbone.js,我一直在寻找我的问题的答案,但还没有找到类似的答案。本质上,我想调用一个函数,该函数接受一个事件,通常通过单击或其他事件附加到一个元素上,但只需直接调用它 本质上,我知道我可以这样做来调用我的函数(用jQuery编写): 是否有一种直接调用函数的方法 function updateThisValue(event) { ...some code... } updateThisValue(***jQuery event object here***); 对于上下文,我使用主干更新网页上的
function updateThisValue(event) {
...some code...
}
updateThisValue(***jQuery event object here***);
对于上下文,我使用主干更新网页上的表单,并定义了一个自定义视图,该视图被定义为在特定事件上调用其方法之一(updateThisValue)。在同一视图的不同方法中,我希望能够直接调用“updateThisValue”方法。但是,“updateThisValue”在其代码中使用事件对象。因此,如果我直接调用该方法,它将失败并出现错误
有办法做到这一点吗?或者,按照我的第一个I-know-I-can-do-it-this-way示例,我只需要手动(通过代码)触发它吗?只是感觉像一个黑客,仅此而已
谢谢。如果您有一个jQuery事件对象,则只能使用jQuery事件对象调用
updateThisValue
所以你可以这样做:
var updateThisValue = function(e) {
//...
}
//The below two pieces of code are equivalent.
$('#myelement').on('click',updateThisValue);
$('#myelement').on('click',function(e) {
updateThisValue.apply(this,[e]);
});
我在第二个代码示例中使用了.apply()
,而不是直接执行updateThisValue(e)
的唯一原因是,如果您想在updateThisValue
函数中使用对的引用(该函数将引用处理该事件的这个dom节点)。如果您不需要在updateThisValue
中引用this
,则可以轻松执行以下操作:
$('#myelement').on('click',function(e) {
updateThisValue(e);
});
如果您发现自己需要直接调用一个方法,那么该方法可能不应该以直接处理事件的方式定义。我建议重构您的代码:
function updateThisValue(arg0, arg1, arg2, ...) {
... some code ...
}
function updateThisValueUsingEvent(event) {
// do nothing except extract the necessary values from event
updateThisValue(event.target, event.which);
}
jQuery('#myElement').on('click', updateThisValueUsingEvent);
// direct invocation:
updateThisValue($(selector)[0], 2);
从MVC的角度来看,updateThisValue函数是控制器的一部分。updateThisValueUsingEvent是从视图到控制器的绑定。特别是因为它听起来像是直接处理您的模型(通过更新值),所以您应该尝试分离视图/控制器的纠缠
您还可以将updateThisValueUsingEvent
定义为事件绑定调用中的内联匿名函数:
jQuery('#myElement').on('click', function(e) {
updateThisValue(e.target, e.which);
});
您需要事件对象的哪一部分?也许您可以使用类似于updateThisValue({target:})
updateThisValue将如何处理事件对象?由于Javascript是一种动态语言,您可以传递任何对象,只要它“看起来”像一个jQuery事件对象,并与所访问的属性和函数相关。啊,你真是个天才。这正是我应该做的。我对整个MVC结构有点陌生,继承了这个相当复杂、部分纠结的javascript代码进行更新。谢谢,迈克。
jQuery('#myElement').on('click', function(e) {
updateThisValue(e.target, e.which);
});