Javascript/PHP onSubmit-按下了哪个按钮?

Javascript/PHP onSubmit-按下了哪个按钮?,javascript,php,jquery,forms,Javascript,Php,Jquery,Forms,我有一个表单,它有3个按钮: <input type='submit' name='mconfirm' value=' Confirm '> <input type='submit' name='modify' value=' Modify '> <input type='button' name='cancel' value=' Cancel ' onClick='goVachSub();'></td></tr>

我有一个表单,它有3个按钮:

<input type='submit' name='mconfirm' value='  Confirm   '>

<input type='submit' name='modify' value='  Modify   '>

<input type='button' name='cancel' value='  Cancel  ' onClick='goVachSub();'></td></tr>

该表单还具有以下功能:

<form name='achievement_modify' method='post' onSubmit='return check_num();' action='".$_SERVER['PHP_SELF']."'>

当按下任一提交按钮时,将运行check_num()函数,对某些需求进行一些检查。但是,当按下modify按钮时,我不需要运行这些检查,但是我仍然将modify按钮作为submit按钮,因为action='“$”服务器['PHP_SELF']保留了我的所有表单数据

我正在寻找一种方法来修改check_num,这样如果它可以确定提交时按了modify,它将不会执行check_num代码。更改它,使其类似于:如果按modify,则不执行任何操作。否则,请更改check_num代码。或者更改modify,使其不是仍然能够保留表单数据的提交按钮

在我的表单中实际发生的情况是,它有一堆文本和下拉列表,然后用户将提交它。输入的数据将再次显示,然后出现上述三个按钮(确认、修改、取消),修改应将其恢复到文本和下拉列表中,数据保持不变

<?php
echo (isset($_POST['mconfirm']))?("mconfirm was pressed"):("mconfirm wasn't pressed");
?>
小提琴:

要获取值,请执行以下操作:

$('input[name=ciccio]').click(function(){
    alert($(this).val()); 
});

基本上,最好的解决方案是添加检查按钮,而不是表单提交

<input type='submit' name='mconfirm' value='  Confirm   ' onclick="return check_num();">

<input type='submit' name='modify' value='  Modify   '>

<input type='button' name='cancel' value='  Cancel  ' onClick='goVachSub(); return check_num();'>
不幸的是,没有解决方案,因为事件对象不包含有关触发表单提交的提交按钮的数据,因为您也可以通过javascript调用表单提交,而无需单击任何提交按钮

<form name='achievement_modify' method='post' onSubmit='return check_num(event);' action='".$_SERVER['PHP_SELF']."'>
仅当表单提交由提交按钮触发时,才适用于mozilla

<form name='achievement_modify' method='post' onSubmit='return check_num(event);' action='".$_SERVER['PHP_SELF']."'>
最好的方法是只通过按钮来处理它,但若你们甚至想要点击哪个按钮,那个么在所有按钮上设置click event(点击事件),它将以hwlp的形式设置变量或属性,以识别点击哪个按钮。 例如:jquery示例

var form=$('your form selector');
form.find('input[type="submit"]').click(function(e){
      var name=this.name;
      form.attr("data-triggeredBy",name);
});

//than in your check num function
function check_num(){
   var btnName=$('your form selector').attr("data-triggeredBy");
   if(btnName!="modify"){
     //do stuff
   }
}

具有name属性的submit按钮将像任何被单击的输入元素一样提交其
,因此
if(isset($\u POST['modify']){…}
将捕获此类内容。您可以检查,在检查中按下了哪个按钮如果你不想在某些按钮上提交表单,你只需要阻止默认操作(=提交表单).@MarcB,OP想在客户端而不是服务器上捕获它。@djot我该如何检查我的函数中按下了哪个按钮?OP的可能副本只想在单击某个按钮时运行JS函数!而不是检查服务器端单击了什么。对不起,先生,我第一次检查帖子时没有写。我很抱歉我更新了上面的帖子,展示了一种舒适的方法来检查用jQuery按下了哪个按钮。事实上,我想你提到的第一个想法完全忘记了,可能真的会起作用……我只需要去掉onSubmit并将函数onClick。当表单再次从按下的modify按钮加载时,它仍然有$\u POST数组数据,因为提交的操作。@user2859406是的,第一种方法更适合您。只是为了解释,我写了其他方法。
<form name='achievement_modify' method='post' onSubmit='return check_num(event);' action='".$_SERVER['PHP_SELF']."'>
function check_num(e){
    var targetBtn=e.explicitOriginalTarget;
    if(targetBtn.name!="modify"){
      //do stuff
    }
}
var form=$('your form selector');
form.find('input[type="submit"]').click(function(e){
      var name=this.name;
      form.attr("data-triggeredBy",name);
});

//than in your check num function
function check_num(){
   var btnName=$('your form selector').attr("data-triggeredBy");
   if(btnName!="modify"){
     //do stuff
   }
}