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

我有一个类似的问题,除了我试图从 Javascript 提交表单,而不是附加 onsubmit 事件处理程序。问题原来是我正在使用的表单上的提交按钮的名称=“提交”......我怀疑这也是导致原始海报问题的部分原因。当表单有一个名为“submit”的按钮时,它会在表单对象上创建一个“submit”属性,覆盖“submit”属性的通常值,该属性是一个提交表单的函数。

看到javascript submit() 不是一个函数?更多细节

于 2012-10-11T17:11:48.040 回答