2009-10-01 56 views
2

我想在onc​​lick發回頁面之前攔截按鈕的onclick事件(不提交)。如何截獲onclick事件

我遇到了一些麻煩:

$(document).ready() { function() { 
    function validate() { 
     ... 
    } 

    var oldOnClick = $("input[value=OK]").attr("onclick"); 
    $("input[value=OK]").attr("onclick", "if(!validate()) { return false; }" + oldOnClick)); 
}); 

回答

7

如果您升要處理的按鈕單擊事件,而不是形式提交事件,因爲所有的建議,你可以做這樣的事情,使用匿名函數,調用你的oldOnClick功能,保存的背景和事件參數:

$(document).ready(function() { 
    function validate() { 
    // ... 
    } 

    var oldOnClick = $("input[value=OK]").get(0).onclick; 
    $("input[value=OK]").click(function (e) { 
    if(!validate()) { 
     return false; 
    } 
    oldOnClick.call(this, e); // enforce the context and event argument 
    }); 
}); 
+0

這正是我想要的。雖然它仍然回來,我可以從這裏工作。 – 2009-10-01 22:52:13

+0

我在分配新的單擊事件之前取消了onclick事件的綁定。這工作。再次感謝! – 2009-10-01 23:09:38

+0

不客氣LB! – CMS 2009-10-01 23:23:23

0

了OnSubmit調用前的形式提交。 您甚至可以取消該事件,因此表單未提交。

3

與其嘗試攔截onClick事件,您應該使用submit event

爲什麼?簡單,不是所有的表單都是通過點擊來提交的,那麼tab,enter等等呢?

$("form").submit(function() { // do validation/stuff here });將做的伎倆。

你可以return false;停止表單提交,或return true;如果你想讓它通過。在.submit本身內進行驗證。

+1

不適用於ASP.NET頁面。 – 2009-10-01 22:08:16

+0

這是記錄的做事方式,所以它要麼ASP是屁股的主要痛苦,要麼是你的代碼不正確。嘗試保持簡單,如'$(「form」)。submit(function(){alert('Hello world。'); return false;});'這應該停止提交併通過JS警報。 – jakeisonline 2009-10-01 22:16:31

+0

Jakeisonline有一個好處 - 假設每個人都會像你一樣使用你的頁面(即用鼠標點擊),很容易被絆住。這並非總是如此。 – BryanH 2009-10-01 22:23:34

0
e.preventDefault(); 

更具體地說,你需要做到這一點

$("#Your_form_id").submit(function(e) { 
e.preventDefault(); 
// your code 
}); 

的另一種方式做到這一點,是傑克說,返回false做一些工作之後......即:

$("#Your_form_id").submit(function() { 
// your code 
return false; 
}); 

查看關於SubmitEvents的Jquery文檔