1

アンカー タグを使用してフォームを送信しようとしています。ただし、検証機能はトリガーされないようです。それ以来、アンカーを送信ボタンに置​​き換えたところ、機能するようになりました。それでも、以前のアンカー リンクが機能しなかった理由が気になります。

コードは

function validate() {

/* validation code here */

return status;

}

<form id="myForm" action="/response_page.php" onsubmit="return validate();" method="POST">

<!-- form elements here -->

<a href="#" class="submit_button" onclick="document.getElementById('myForm').submit();">Submit</a>

</form> 

このコードでは、リンクをクリックすると *response_page.php* に直接移動します。しかし、送信ボタンに置​​き換えると

<input type="submit" value="submit" /> 

検証関数とフォーム タグを変更しなくても、検証関数は正しく呼び出されます。アンカーの何が問題になっていますか?

ありがとう

4

1 に答える 1

3

これは予期される動作です。

送信機能の MDNから:

フォームの onsubmit イベント ハンドラー (たとえば、onsubmit="return false;") は、Gecko ベースのアプリケーションからこのメソッドを呼び出したときにトリガーされません。一般に、HTML ユーザー エージェントによって呼び出されることは保証されていません。

リンク内のコードを検証したい場合は、validate関数を明示的に呼び出すだけです:

<a id=subbut href="#" class="submit_button">Submit</a>
...
document.getElementById('subbut').addEventListener('click', function(){
    if (validate()) document.getElementById('myForm').submit();
});
于 2013-11-09T18:56:33.927 に答える