0

JavaScriptでアクションを変更した後に送信するHTMLフォームがあります。2 つの異なるボタンで送信できます。

興味深いのは、アクションを変更した後、フォームを送信する前に、デバッグを試みてアラートを挿入したことです。アラートが表示されることなく、フォームが送信されます。実際に JavaScript を実行していることを確認するために、アクションを変更する前にアラートを追加しました。そのアラートが表示されます。アクションを変更した後のアラートはそうではありません。

<form name='FormSelect' method='post' action='Undefined'>
...
<button onclick="SubmitForm('class')">Submit</button>
...
<button onclick="SubmitForm('student')">Submit</button>
...
</form>

<script type="text/javascript">
function SubmitForm(target){
    alert("Action 1: " + document.FormSelect.action);
    if (target=="class") {
        document.FormSelect.action = "ClassAction.php";
    } else {
        document.FormSelect.action = "StudentAction.php";
    }
    alert("Action 2: " + document.FormSelect.action);
 // document.FormSelect.submit();
    }
</script>

それは予想される一連の出来事ですか?

4

4 に答える 4

1

フォーム要素内に配置されたボタンは、送信アクションを引き起こします。これを防ぐには、ボタン要素に type="button" を追加するか、コールバックを送信して false; を返すようにします。

<button type="button" onclick="SubmitForm('class')">Submit</button

http://jsfiddle.net/yD2Uu/を参照してください

于 2013-04-30T20:41:44.860 に答える
0

Yauhen Vasileusky の例のおかげで、1 回目と 2 回目のアラートの間のコードの削除を開始したところ、問題は次の IF ステートメントにあるように思われることがわかりました。

if (document.FormSelect.FormName.value.substr(0,19)=="ObservationRequest_" || document.FormSelect.FormName.value=="StudentReg2013rx" || document.FormSelect.FormName.value=="Toddler Update Form v3rx")
{
document.FormSelect.action = "GenerateXDP.php";
}

削除すると、両方のアラートが表示されます。したがって、私の質問に対する答えは、アクションを変更してもフォームが送信されないということです。私のコードの他のエラーが原因で、あたかもそうであるかのように見えました。

于 2013-05-01T20:24:50.037 に答える
0

他の人がすでに指摘しているように、イベントをキャンセルしない限り、とにかくフォームが送信されます。あなたの問題に対する JavaScript を使用しない解決策を提案したいと思います。

<button formaction="ClassAction.php">Submit</button>
<button formaction="StudentAction.php">Submit</button>

ただし、IE < 10 ではサポートされていません。ただし、関数をフォールバックとして使用することもできます。もう少しエレガントです ;)

function SubmitForm(button){
  button.form.action = button.formaction;
}
于 2013-04-30T21:02:01.700 に答える
0

より良い解決策は、ボタンにそれぞれ名前を付けて Action.php に送信し、サーバーが名前付きボタンの値を取得できるようにすることです。

$student = filter_var($_POST["student"], FILTER_SANITIZE_STRING); // php5 cleaning

あなたが持っているとき

<form method="post" action="Actions.php">
  <input type="submit" name="student" value="John Doe" />
  <input type="submit" name="student" value="Jane Doe" />
  <input type="submit" name="student" value="Whatever Doe" />
</form>

それ以外の場合は

これを試して

<form method='post' action='Undefined'>
...
<input type="button" value="Class" onclick="SubmitForm(this)" />
...
<input type="button" value="Student" onclick="SubmitForm(this)"/>
...
</form>

<script type="text/javascript">
var actions = {
  "class":"ClassAction.php",
  "student":"StudentAction.php"
}

function SubmitForm(button){
  button.form.action = actions[button.value];
  button.form.submit();
}
</script>
于 2013-04-30T20:35:29.077 に答える