2010-09-28 140 views
1

我在HTML表单中有2个按钮。他们都应该提交表格。我需要捕捉哪个按钮已被点击,以便我可以使用它来执行基于哪个按钮被点击的不同操作。用两个按钮提交表单

我能够提交与两个按钮的形式,但我将如何捕捉哪个按钮被点击的PHP文件。

<INPUT type="button" name="submit" class="button" class="element_2" value="firstbutton"> 
<INPUT type="button" name="submit1" class="button" class="element_2" value="second button.. "> 

我在Jquery中使用post方法提交表单。我怎么能检查哪些HTML按钮被点击在服务器端的PHP脚本

+0

您可能想要添加为什么需要两个提交按钮。一个简单的单选按钮似乎也可以工作,并且您将拥有一个真正的提交按钮。 – Clutch 2010-09-28 21:12:13

回答

2

你可以在这里使用隐藏元素,如下所示:

<input type="hidden" id="submittedBy" name="submittedBy"> 

您当前的.submit()使用.serialize()$.post()应该工作的处理程序,只需点击任一按钮时,例如更新的隐藏字段:

$("form :submit").click(function() { 
    $("#submittedBy").val(this.name); 
}); 

然后在PHP只检查$_POST["submittedBy"] == "submit""submit1"看哪个造成的。


另一种方法是让click处理POST和值.serializeArray()$.param()之间添加被调用,像这样:

$("form :submit").click(function() { 
    var data = $(this.form).serializeArray(); 
    data.push({ name: 'submittedBy', value: this.name }); 
    $.post("myPage.php", data, function(result) { 
    //do something 
    }); 
    return false; //prevent normal form submission, even with the .submit() handler 
}); 
1

你可以尝试使用isset功能

if(isset($_POST['submit'])){ 
echo "first button was clicked"; 
} 

或检测第二个被点击:

if(isset($_POST['submit1'])){ 
echo "second button.. was clicked"; 
} 
+0

请参阅@Nick对我删除的答案发表评论,告诉他为什么这是错误的。 – 2010-09-28 20:56:24

+1

@Darin - 53代表;)但我会在这里repro。 – 2010-09-28 20:57:44

+2

这是不正确的,他使用jQuery中的post方法,即使使用'.serialize()',它也明确地概述了这种情况不会发生:“注意:只有”成功的控件“被序列化为字符串。按钮值是序列化的,因为表单不是使用按钮提交的,对于要包含在序列化字符串中的表单元素的值,元素必须具有name属性,来自文件选择元素的数据不会被序列化。参考:http://api.jquery.com/serialize/ – 2010-09-28 20:58:01

1

我会捕捉使用页面上的所有事件:

$(document).click(function (obj) { 
    if ('equipmentSetup' === obj.target.id) { 
     $('#form').submit(); 
    } 

....

然后添加一条if语句,查找所需按钮的“id”。不要使用名称或ID“提交”。我忘了为什么,但我记得它给我造成了问题。

2

只是这样做,

HTML

<button type="submit" name="action[update]" value="1">Update</button> 
<button type="submit" name="action[delete]" value="1">Delete</button> 

PHP

$action = isset($_POST['action']['update']) ? 'update' : 'delete'; 

你不能依赖于JavaScript来告诉你至极按钮被点击,如果用户有JavaScript禁用,您的表单已损坏。

+0

如果您有两个以上,则适用相同的逻辑,但您希望使用switch语句。 – xmarcos 2010-09-28 21:19:47

1

你可以尝试改变按钮来键入=“按钮”,并给他们ID。就这样,你可以使用jQuery的线(无法检查下面我的语法,但我想我已经得到了它的权利)

$('form button').click(function(){ 
    if($(this).attr('id') = "button1"){ ...button 1 clicked} 
    ..process form here.. 
}); 

会认为做呢?