2011-04-12 41 views
4

我正在使用asp.net MVC,当我提交表单时,以前的开发人员已经嵌入了一些jQuery验证。jQuery表单提交:任何方式知道什么元素触发提交?

$('form').submit(function() { 
    ...code done here to validate form fields 
}); 

的问题是,无论是“保存”,并在表格火“取消”按钮,这个提交jQuery的功能。如果“取消”输入按钮被触发(id =“cancel”name =“cancel”value =“cancel”),我不希望验证逻辑触发。 有没有一种方法,在这个提交函数中,我可以检索按下哪个输入按钮来提交表单的ID,名称或值?

回答

8

我问同样的问题:How can I get the button that caused the submit from the form submit event?

唯一的跨浏览器的解决方案,我能想出是这样的:

$(document).ready(function() { 
    $("form").submit(function() { 

    var val = $("input[type=submit][clicked=true]").val() 

    // DO WORK 

}); 

$("form input[type=submit]").click(function() { 
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked"); 
    $(this).attr("clicked", "true"); 
}); 

不知道如果你正在寻找,但你应该回答将“取消”按钮更改为定位标记。除非您正在处理表单值,否则无需提交取消。

+0

这很好,谢谢。我只是调整它,并用“图像”代替“提交”,因为我的保存和取消是“图像”类型。现在它给了我按下按钮的值,无论是“取消”还是“保存”。我只验证它是否现在不说“取消”值。谢谢! – 2011-04-12 20:29:13

+0

当然很难找到解决方案... – 2017-02-10 13:12:40

0

以及这只会火如果输入按钮的type就像这样:

<input type='submit' ... 

所以一定要确保取消按钮没有type='submit',它应该工作

+0

他们实际上都标记'type =“image”',因为他们都是图像输入按钮。 – 2011-04-12 20:12:43

+1

然后其他人应该触发提交。 – Neal 2011-04-12 20:15:03

+0

代码如下,并提交表格:

<%= ViewData [”docId “]%>”method =“post”> ”type =“image”id = “save”value =“save”style =“border:none; <%= ViewData [”showsave“]%>”/> ”type =“image”id =“cancel”value =“cancel”style =“border:none; <%= ViewData [”showsave“]%>”>
2011-04-12 20:21:58

0
var myForm = $('form'); 
$('input[type="submit"]',myForm).click(function(e) { 
    var whoClickedsubmit = $(e.target); //further, you can use .attr('id') 
    //do other things here 
}); 

编辑

.submit(function(event){ 
    var target = event.originalEvent.explicitOriginalTarget.value; 
    //But IE does not have the "explicitOriginalTarget" property 
}); 
+7

对于提交事件,这将返回表单本身,而不是单击的按钮。 – mVChr 2011-04-12 20:02:19

+0

是的,这是错误的 - 目标将是“形式”。 – 2011-04-12 20:04:12

+0

@mVChr:我编辑了我的答案。 – 2011-04-12 20:07:16

0

编辑

在FF而不是在Chrome这仅适用于(和我的话,我想,不能在其他基于WebKit的浏览器要么),所以我就要离开这个在这里作为一个浏览器特定的解决方法,一个有趣的笔记,但不是答案。


@没有发出类型的取消按钮的尼尔的建议提交也许是最简洁的方式。但是,如果你必须这样做,你现在正在这样做:

$('form').submit(function(e){ 
    if(e.originalEvent.explicitOriginalTarget.id === 'cancel'){ 
     //don't validate 
    } 
    else{ 
     //validate 
    } 
});