4

これは私が得たものです:

<form method="post" id="myform" class="myform">
    <input type="submit" onclick="return claim();" name="submit" class="onsubmit" value="" />
</form>
function claim() {
    var c = confirm('You sure?');

    if (!c) {
        return false;
    }

    var password = prompt("Please mention pw","");
    if (password != null && password != "") {
        $.post(
            "/claim/", 
            { partner_pwd: password },
            function(data) {
                if (data == '1') {
                    $('form').submit(function() {
                        alert('Handler for .submit() called.');
                    });
                }
            });
        }

        return false;
    }

これはうまく機能しますが、私の問題は、フォームが送信されないことです。私はステートメントの中で両方$('form').submit()を試しました。このifステートメントを試してみましたが、正常に表示されました。フォームを送信するだけで済みます。なぜこの機能が機能しないのでしょうか。$('#myform').submit()data == '1'alert(1)

アップデート:

コンソールによると:

Uncaught TypeError: Property 'submit' of object #<HTMLFormElement> is not a function jquery.min.js:3 f.event.trigger
4

5 に答える 5

4

次の間違いを犯しました。

  1. jQueryセレクター'form'は一般的すぎて、配列を返します。したがって、に変更し'#myform'ます。
  2. また、JavaScriptでフォームの送信が許可されることはありません。犯人は最後の行です:return false;。フォームの検証に成功した後でも、この行はフォームをブロックしました。だったはずreturn true;です。この間違いは@11684によって指摘されましたが、誰も彼を理解せず、一部の人から反対票を投じられました。

とにかく、これがデバッグされたコードです。

 function claim()
{
    var c = confirm('You sure?');

    if (!c) {
        return false;
    }

    var password=prompt("Please mention pw","");
    if (password!=null && password!="")
      {
            $.post("/claim/", { partner_pwd: password },
               function(data) {
                    if(data == '1')
                    {
                        $('#myform').bind('submit',function() {
                          alert('Handler for .submit() called.');
                        });
                    }
               });
      }

    return true;

}
于 2012-05-26T10:35:43.117 に答える
3

イベントを発生させるには、次のようなパラメーターを指定せずにrelevent関数を呼び出します。

$('form').submit();

現在のコードは、フォームの送信時に実行される送信ハンドラー関数を追加しているだけで、実際にはフォームを送信していません。

于 2012-05-26T10:24:07.213 に答える
3

試す:

$('#myform')[0].submit();
于 2012-05-26T10:25:18.957 に答える
0

Roryが言ったように、コードはイベントハンドラーのみを追加します。あなたがする必要があります

$(form).submit()

パラメータなし。ハンドラーをアタッチし、後でイベントをトリガーする場合は、次を使用できます。

$(form).trigger('submit')
于 2012-05-26T10:47:34.567 に答える
0

onsubmitイベントハンドラーをアタッチせずに、Javascriptからフォームを送信しようとしたことを除いて、同様の問題が発生しました。問題は、私が使用していたフォームの送信ボタンにname = "submit"が付いていることでした...これも、元の投稿者の問題の原因の一部だったと思います。フォームに「submit」という名前のボタンがある場合、フォームオブジェクトに「submit」プロパティが作成され、フォームを送信する関数である「submit」プロパティの通常の値が上書きされます。

javascript submit()は関数ではありませんか?を参照してください。詳細については

于 2012-10-11T17:11:48.040 に答える