2012-08-06 64 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) ; 
} 
相關問題