这就是我得到的:
<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()
语句中尝试了$('#myform').submit()
和data == '1'
。我在if语句中尝试alert(1)
,它显示正常,我只需要提交表单,为什么不能这样做?
的更新 的
控制台说:
Uncaught TypeError: Property 'submit' of object #<HTMLFormElement> is not a function jquery.min.js:3 f.event.trigger
答案 0 :(得分:4)
你犯了以下错误:
'form'
过于笼统并返回一个数组。因此,请将其更改为'#myform'
。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;
}
答案 1 :(得分:3)
要引发事件,请调用相关函数,而不使用如下参数:
$('form').submit();
您当前的代码只是添加一个提交处理函数,在表单提交时执行,它实际上并没有提交表单。
答案 2 :(得分:3)
尝试:
$('#myform')[0].submit();
答案 3 :(得分:0)
正如Rory所说,你的代码只会添加一个事件处理程序。你需要做
$(form).submit()
没有参数。如果要附加处理程序,然后稍后触发事件,可以使用
$(form).trigger('submit')
答案 4 :(得分:0)
我有一个类似的问题,除了我试图从Javascript提交表单,而不是附加一个onsubmit事件处理程序。问题是我正在使用的表单上的提交按钮名称=“提交”...我怀疑这也是造成原始海报问题的部分原因。当表单有一个名为“submit”的按钮时,它会在表单对象上创建一个“submit”属性,覆盖“submit”属性的常用值,该属性是一个提交表单的函数。
有关详细信息,请参阅javascript submit() is not a function?