34

わかりました、これは私の情報のためだけというよりも質問ではありません (それを機能させる約 4 つの異なる回避策を考えることができるからです。しかし、私はフォームを持っています (それほど特別なものはありません) が、送信ボタンには特定の値があります)それに関連付けられています。

<input type='submit' name='submitDocUpdate' value='Save'/>

フォームが送信されたら、その名前を確認します。

if(isset($_POST['submitDocUpdate'])){ //do stuff

ただし、送信ボタンではなく、Javascript を使用してフォームを送信しようとしている場合があります。

document.getElementById("myForm").submit();

1つの問題を除いて、これは正常に機能しています。javascript メソッドを介して送信された $_POST 値を見ると、submitDocUpdate が含まれていません。フォームの他のすべての値を取得しますが、送信ボタンの値は取得しません。

私が言ったように、それを回避するいくつかの方法を考えることができます(隠し変数を使用する、別のフォーム変数で isset をチェックするなど)が、これが submit() の正しい動作であるかどうか疑問に思っています。 -私には直感的です。前もって感謝します。

4

7 に答える 7

40

はい、それは正しい動作ですHTMLFormElement.submit()

送信ボタンの値が送信されない理由は、クリックされた (またはアクティブ化された) 送信ボタンの値を送信するように HTML フォームが設​​計されているためです。これにより、「プレビュー」アクションと「保存」アクションの両方が必要なシナリオなど、フォームごとに複数の送信ボタンを使用できます。

プログラムでフォームを送信しているため、個々の送信ボタンに明示的なユーザー アクションがないため、何も送信されません。

于 2009-11-10T16:40:44.173 に答える
7

代わりに以下を使用しないのはなぜですか?

<input type="hidden" name="submitDocUpdate" value="Save" />
于 2009-11-10T16:37:28.407 に答える
2

ユーザーがボタンをクリックすると、送信ボタンの値が送信されます。form.submit() の呼び出しはボタンをクリックしていません。複数の送信ボタンがあり、 form.submit() 関数には、どのボタンをサーバーに送信するかを知る方法がありません。

于 2009-11-10T16:42:35.160 に答える
0

これは、外部ライブラリがなくてもすべてのブラウザで問題なく動作するアイデアです。

HTML コード

<form id="form1" method="post" >
    ...........Form elements...............
    <input type='button' value='Save' onclick="manualSubmission('form1', 'name_of_button', 'value_of_button')" />
</form>

Java スクリプト

body タグを閉じる直前にこのコードを挿入します

<script type="text/javascript">
    function manualSubmission(f1, n1, v1){
    var form_f = document.getElementById(f1);
    var fld_n = document.createElement("input");
    fld_n.setAttribute("type", "hidden");
    fld_n.setAttribute("name", n1);
    fld_n.setAttribute("value", v1);
    form_f.appendChild(fld_n);
    form_f.submit();
}
</script>

PHPコード

<?php if(isset($_POST['name_of_button'])){

       // Do what you want to do.
}
?>

注:ブラウザの互換性が失われる可能性があるため、ボタンに「送信」という名前を付けないでください。

于 2018-11-06T20:09:02.027 に答える