我对我的问题的回答看起来很多,但还没有找到类似的东西。本质上,我想调用一个接受事件的函数,通常会通过点击或其他事件附加到元素,而只是直接调用它。
从本质上讲,我知道我可以这样做来调用我的函数(用jQuery编写):
function updateThisValue(event) {
...some code...
}
jQuery('#myElement').on('click', updateThisValue);
jQuery('#myElement').trigger('click');
有没有办法直接调用函数?
function updateThisValue(event) {
...some code...
}
updateThisValue(***jQuery event object here***);
对于上下文,我使用Backbone更新网页上的表单,并定义了一个自定义视图,该视图被定义为在特定事件上调用其方法之一(updateThisValue)。在同一View的不同方法中,我希望能够直接调用“updateThisValue”方法。但是,“updateThisValue”在其代码中使用事件对象。因此,如果我直接调用该方法,则会因错误而失败。
有办法做到这一点吗?或者我只是必须手动(通过代码)按照我的第一个I-know-I-can-do-it-way-example示例触发事物?只是感觉像是一个黑客,就是这样。
感谢。
答案 0 :(得分:1)
如果您拥有 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)
的唯一原因是,您希望在{{this
中使用updateThisValue
的引用1}} function(它将引用处理该事件的dom节点)。如果您不需要this
中对updateThisValue
的引用,那么您可以轻松地执行以下操作:
$('#myelement').on('click',function(e) {
updateThisValue(e);
});
答案 1 :(得分:0)
如果您发现自己需要直接调用方法,则可能不应该以直接处理事件的方式定义该方法。我建议重构你的代码:
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函数是Controller的一部分。 updateThisValueUsingEvent是从View到Controller的绑定。特别是因为它听起来像直接处理你的模型(通过更新值),你应该尝试分离视图/控制器纠缠。
您还可以在事件绑定调用中将updateThisValueUsingEvent
定义为内联匿名函数:
jQuery('#myElement').on('click', function(e) {
updateThisValue(e.target, e.which);
});