Javascript 通过代码将事件对象传递给函数

Javascript 通过代码将事件对象传递给函数,javascript,function,events,backbone.js,Javascript,Function,Events,Backbone.js,我一直在寻找我的问题的答案,但还没有找到类似的答案。本质上,我想调用一个函数,该函数接受一个事件,通常通过单击或其他事件附加到一个元素上,但只需直接调用它 本质上,我知道我可以这样做来调用我的函数(用jQuery编写): 是否有一种直接调用函数的方法 function updateThisValue(event) { ...some code... } updateThisValue(***jQuery event object here***); 对于上下文,我使用主干更新网页上的

我一直在寻找我的问题的答案,但还没有找到类似的答案。本质上,我想调用一个函数,该函数接受一个事件,通常通过单击或其他事件附加到一个元素上,但只需直接调用它

本质上,我知道我可以这样做来调用我的函数(用jQuery编写):

是否有一种直接调用函数的方法

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);
});