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

时间:2013-10-08 16:15:50

标签: 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>

表格也有以下几点:

<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代码。或者更改修改,使其不是仍然能够保留表单数据的提交按钮。

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

2 个答案:

答案 0 :(得分: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()); 
});

答案 1 :(得分: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
    }
}

最好的办法是只通过按钮来处理它,但是如果你甚至想要点击哪个按钮,在所有按钮上设置click事件,它将在表单中设置变量或属性,以便识别哪一个被点击。 例如: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
   }
}