2009-10-01 67 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文档