0

我有一个有 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 代码。更改它,使其类似于:如果 modifyPressed,则不执行任何操作。否则 check_num 代码。或者更改修改,使其不是仍然能够保留表单数据的提交按钮。

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

4

2 回答 2

0

基本上,您需要的最佳解决方案是添加对按钮单击而不是表单提交的检查。

<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
    }
}

最好的方法是仅通过按钮来处理它,但是如果您甚至想要单击哪个按钮,请在所有按钮上设置单击事件,这将在表单中设置变量或属性,从而识别单击了哪个按钮。例如: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
   }
}
于 2013-10-08T17:25:35.107 回答
0
<?php
echo (isset($_POST['mconfirm']))?("mconfirm was pressed"):("mconfirm wasn't pressed");
?>

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

假设您按下了“mconfirm”提交按钮,上面的代码将生态“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()); 
});
于 2013-10-08T16:26:35.627 回答