13

私は完全に混乱しています...これは昨日は機能していたと断言します...今朝目が覚めたら、プロジェクトですべてのフォームが機能しなくなりました。

すべてのフォームには、ajax 呼び出しであるため false を返す関数への「onsubmit」があるため、フォームは送信されません。

多くのテストの後、質問を次のコードに単純化しました。

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" id = "form1" onsubmit = "return sub()">
 input: <input type="text" name="input1" >
    <a href="#" onClick="document.getElementById('form1').submit();">button</a> 
</form>

</body>
</html>

私はこれが完全に機能することを誓いますが、今日は機能していません:D

ボタンを押すとフォームが送信されるのはなぜですか?

私はそれがまったくの初心者の質問であることを知っていますが、私は立ち往生しています

ありがとうございました !

4

10 に答える 10

14

プログラムで submit() を呼び出した場合、ブラウザーはフォームで onSubmit イベントを呼び出しません。

于 2010-03-30T09:12:26.657 に答える
8

「submit()」関数は、Firefox および IE8 の「form」タグの「onsubmit」イベントをバイパスしているようです。送信ボタンを使用すると、期待どおりに機能します。

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" action="http://google.com" id = "form1" onsubmit = "return sub();">
 input: <input type="text" name="input1" >
     <input type="submit">
</form>

</body>
</html>
于 2010-03-30T09:22:23.757 に答える
5

onsubmit イベントは、通常のフォーム送信に対してのみ発生します。submit()JavaScriptメソッドが呼び出されたときは起動しません。

最善の解決策は、ここで通常の送信ボタンを使用することです。

ページの上部へのリンク (目立たないプログレッシブ、または優雅ではない)を引き続き使用するsub()場合は、呼び出すかどうかを決定する前に、関数を明示的に呼び出し、その戻り値をテストする必要がありますsubmit()

于 2010-03-30T09:09:27.130 に答える
4

jquery preventDefault メソッドを使用できます。

$(function () {
        $('#repForm').bind('submit', function (e) {
            var isValid = true;
            if (btnname == 'test') {
                isValid = ValidateEmailID();
            }
            else {
                isValid = ValidateSomething();
            }

            if (!isValid) {
                e.preventDefault();
            }
        });
    });
于 2012-02-17T11:18:36.713 に答える
2

そのような「ボタン」コードを変更してみてください

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 
于 2010-03-30T09:08:27.757 に答える
0

フォーム タグ内のすべての onsubmit ステートメントに「return」を追加します... 例: onsubmit="return validate_function()" このように、validate 関数の return false または return true は、onsubmit の return コマンドの結果としてポストされます。

于 2015-08-22T14:17:17.837 に答える
0

彼は、送信タイプではないフォーム ボタンを使用したかったのではないかと思います。この場合、以下も使用できます。

 <input type="button" value="Submit" onclick="if( sub()) document.getElementById('form1').submit()">

私が提供するもう 1 つのヒントはname、すべてのフォームで属性を使用すること document.form1.submit()です document.getElementById('form1').submit()。それはクロスブラウザであり、それらすべてで動作します。getElementById は優れていますが、フォームには必要ありません。

于 2013-01-22T23:06:01.123 に答える
-4

基本的な構文と構造を確認してください...次に、ページ上の他のフォームまたはフォームのない入力ボックスを確認してください...同じ問題が発生しました(または同様:入力ボックスでEnterキーを押すと、フォームが送信されます)...

上記のサンプルをコピーして貼り付け、ページを読み込みました。それらは機能しましたが、私のものは機能しませんでした。そのため、フォーマットを微調整し、書き直しました。

于 2013-03-05T02:43:13.603 に答える