2012-08-06 112 views
0

在下面的代码中,我会在哪里使用preventDefault?我一直在测试它,使其工作,但还没有找到一个好办法取消默认submit行动。哪个功能需要捕捉事件对象?Javascript - 使用参数引用全局函数的匿名函数中的闭包 - 如何使用preventDefault?

下面是代码:

f_name = 'someFunc' ; 
f_args(1,2,3) ; 

if(element.addEventListener) { 
element.addEventListener('submit',(function(name,args,element) { 
    return function() { 
     window[name].apply(element,args) ; 
    } 
})(f_name,f_args,element) 
,false) ; } 

回答

1
f_name = 'someFunc'; 
f_args = [1, 2, 3]; 
if (element.addEventListener) { 
    element.addEventListener('submit', (function (name, args, element) { 
     return function (e) { 
      // here 
      e.preventDefault(); 
      window[name].apply(element, args); 
     }; 
    })(f_name, f_args, element), false); 
} 
+0

太棒了!这工作。 – 2012-08-06 03:07:57

1

假设你想要的preventDefault上只有一些事件处理程序,你可以使用preventDefault()您用来处理特定事件的回调中。在你的例子中,这将是name参数表示的全局函数,它将是全局函数。

如果您希望为所有事件处理程序(对我没有多大意义)执行此操作,那么您可以在拨打window[name]之前或之后在代码中执行此操作。

+0

嗯我的问题是,我路过的争论和不知道如何让事件对象时,我没有通过它作为好。在这种情况下,我正在从一个字符串形成这些函数调用,当我发现返回false;即时设置preventDefault()。 – 2012-08-06 03:09:06

+0

@MagicLasso - 下一次,也许你可能会更具体一点,你需要知道的只是如何获得传入事件处理函数的事件。对于很多人来说,这很容易回答。 – jfriend00 2012-08-06 03:12:01

0

你的处理函数将与该事件被称为参数

return function(evt) { 
    evt.preventDefault(); 
    window[name].apply(element,args) ; 
} 
相关问题