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


Javascript/PHP onSubmit - which button was pressed?

我有一个有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(( 函数,该函数会根据某些要求进行一些检查。但是,当按下修改按钮时,我不需要运行这些检查,但是我仍然将修改按钮作为提交按钮,因为 action='".$_SERVER['PHP_SELF'] 保留了我的所有表单数据。

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

在我的表单中实际发生的是它有一堆文本和下拉菜单,然后用户会提交它。输入的数据将再次显示,然后会出现提到的三个按钮(确认、修改、取消(,修改应将其带回文本并在数据完好无损的情况下再次下拉。

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

在 $_POST['nameattr'] 上使用 ISSET 会告诉您该按钮是否已提交。

假设您按下了"mconfirm"提交按钮,上面的代码将eco"mconfirm 已按下"。

没有三元运算符的方法:

    <?php
if (isset($_POST['mconfirm'])) {
            // mconfirm was pressed
        }
        elseif (isset($_POST['modify'])) {
            // modify was pressed
        }
        else {
            // noone of them was pressed
        }
?>

当然,它也可以用javascript来完成,但是如果你不需要在用户点击按钮时准确地检查它,那么用php就可以了。

希望这有帮助。

评论后编辑:很好,然后使用javascript,当我第一次检查没有写的帖子时。

检查用jQuery按下了哪个按钮(如果我没有出错,jQuery在标签中(:

$('input[name=mconfirm]').click(function(){
// mconfirm was pressed, check what you need
});

小提琴:http://jsfiddle.net/hEQ4Q/

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

$('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();'>

或者在 jquery 中

$('your form selector').find('input[type="submit"]').click(function(e){
      var name=this.name;
      if(name!="modify"){
         //do your check
      }
});

不幸的是,没有解决方案,因为事件对象不包含有关触发表单提交的提交按钮的数据,因为您也可以通过javascript调用表单提交,而无需单击任何提交按钮。

对于 Mozilla,只有当您表单提交时才由提交按钮触发。

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

/在你的check_num函数

function check_num(e){
    var targetBtn=e.explicitOriginalTarget;
    if(targetBtn.name!="modify"){
      //do stuff
    }
}

最好的方法是仅通过按钮来处理它,但是如果您甚至想要单击哪个按钮,请在所有按钮上设置单击事件,该事件将在表单中设置变量或属性,这将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
   }
}