我想将参数传递给已经处理事件对象的函数:
function bla(e){
//function code
e.preventDefault();
e.stopPropagation();
return false;
}
但我需要从另一个传递参数的地方调用此函数:
bla(arg);
我不知道怎么......我试过了:
bla(e, arg); //failed
和
function bla(){
(function (e){
e.preventDefault();
e.stopPropagation();
}());
}//e is undefined
和
function bla(){
var e = window.event;
//code....
//e is undefined;
}
和其他人没有任何作用,我可以做些什么?
答案 0 :(得分:0)
一种选择是修改您的事件处理程序。您可以在处理程序中使用匿名函数来停止传播等,然后调用您的方法。这样,bla
方法不关心处理事件,可以在代码中的其他位置调用。但是如果你有很多使用这种方法的事件会重复代码:
someElement.on('someEvent', function(e, data){
e.preventDefault();
e.stopPropagation();
bla(data);
});
另一种选择是创建另一个处理事件的方法,然后用数据调用你的结束事件处理程序。
function genericEventHandler(fn, context){
return function(e) {
e.preventDefault();
e.stopPropagation();
/*
This will allow it to call fn with any number of arguments
*/
var args = [].splice.call(arguments, 1);
fn.apply(context, args);
}
}
someElement.on('someEvent', genericEventHandler(bla));
someElementTwo.on('someOtherEvent', genericEventHandler(bla));
通过这种方式,您可以为方法之间的通用行为创建多个方法,还可以更轻松地更改此通用行为,因为您只需要在一个位置更改它。
我认为当您尝试手动调用bla
时,现有尝试失败的原因是因为e
对象不存在(如果您尚未传入)或者不存在有正确的结构。
null/undefined
作为bla
的第一个参数,如果你或团队中的其他人忘记它将导致奇怪的错误。如果需要,它还可以使您的事件处理程序更容易测试,并在应用程序的其他位置使用。
function bla(e, data){
if (e !== undefined) {
e.preventDefault();
e.stopPropagation();
}
//do something with data
}
bla(undefined, 'some random data');
答案 1 :(得分:0)
好的,谢天谢地,我有答案:
function bla(e, data){
//code...
if(e !== NULL){
e.preventDefault();
e.stopPropagation();
}
}
这是完美的。
bla(null,data)