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コード。または、フォーム データを保持できる送信ボタンにならないように変更します。

私のフォームで実際に起こることは、たくさんのテキストとドロップダウンがあり、ユーザーがそれを送信することです。入力されたデータが再び表示され、前述の 3 つのボタン (確認、変更、キャンセル) が表示され、変更はテキストに戻り、データがそのままの状態で再びドロップダウンされます。

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

最善の方法はボタンのみを使用して処理することですが、どのボタンがクリックされたのかさえ知りたい場合は、すべてのボタンにクリックイベントを設定します。これにより、どのボタンがクリックされたかを識別するために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
   }
}
于 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 に答える