<form method="post" action="load_statements.php?action=load" id="loadForm"
enctype="multipart/form-data">
这是我的表格,对我来说很好看。在那种形式,我把这个按钮:
<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />
这是它调用的函数:
function confirmSubmit() {
// get the number of statements that are matched
$.post(
"load_statements.php?action=checkForReplace",
{
statementType : $("#statementType").val(),
year : $("#year").val()
},
function(data) {
if(data['alreadyExists']) {
if( confirm("Statements already exist for " + $("#statementType").html() + " " + $("#year").val() +
". Are you sure you want to load more statements with these settings? (Note: All duplicate files will be replaced)"
)) {
$("#loadForm").submit();
}
} else {
$("#loadForm").submit();
}
}, "json"
);
}
如您所见,它调用$("#loadForm").submit();
,但表单未提交(即页面不刷新)。那是为什么?
谢谢!
答案 0 :(得分:76)
将按钮的“提交”名称更改为其他名称。这导致了问题。 请参阅dennisjq的答案: http://forum.jquery.com/topic/submiting-a-form-programmatically-not-working
请参阅jQuery submit()文档:
表单及其子元素不应使用输入名称或ID 与表单属性冲突,例如提交,长度或方法。 名称冲突可能导致混乱的故障。有关的完整列表 规则以及检查这些问题的标记,请参阅DOMLint。
答案 1 :(得分:19)
我使用$("form")[0].submit()
这里$("form")
返回一个DOM元素数组,因此通过访问相关索引,我们可以获取表单元素的DOM对象,并在该DOM元素中执行submit()
函数。
退回是如果你在一个html页面中有几个表单元素,你必须知道“表单”的正确顺序
答案 2 :(得分:17)
jQuery submit()
事件会在您提交表单时添加一个事件侦听器。因此,您的代码与提交事件基本上没有任何关系。 如果您希望提交该表单,请使用旧式JavaScript document.formName.submit()
。
我完整地留下原来的答案,指出我离开的地方。我意味着要说的是,如果你有这样的函数,那么为什么要在ajax部分中发布值然后使用jQuery提交表单会让人感到困惑。在这种情况下,我会将事件绑定到单击按钮,然后如果要返回则返回true,否则返回false,如下所示:
$('#submit').click( function() {
// ajax logic to test for what you want
if (ajaxtrue) { return confirm(whatever); } else { return true;}
});
如果此函数返回true,则表示单击提交按钮成功,并且会发生正常的浏览器行为。然后,您还以事件处理程序的形式将逻辑与标记分开。
希望这更有意义。
答案 3 :(得分:13)
我遇到了类似的问题,花了一段时间才弄明白。 jQuery的.submit()函数应该触发表单提交,如果你没有将处理程序传递给它,但它之所以不是因为你的提交按钮被命名为&#34;提交&# 34;并且正在覆盖表单的提交功能。
即。 jQuery调用DOM对象的<form>.submit()
函数,但是通过调用<form>.<inputname>
也可以访问表单中的所有输入。因此,如果您的某个输入被命名为&#39;提交&#39;它用<form>.submit()
覆盖<form>.submit
函数 - 作为输入DOM元素....如果这有意义吗?因此,当jQuery调用<form>.submit()
时,它不起作用,因为提交不再是一个函数。 因此,如果您更改按钮的名称,则应该有效。
不确定为什么控制台没有记录错误,也许jQuery首先检查提交函数是否存在,如果函数不存在则忽略请求。
答案 4 :(得分:4)
我在表单中添加了一个不可见的提交按钮,而不是调用submit()函数,我在提交按钮上调用click()函数=)
按钮:
<div style="display:none"><input id="alternateSubmit" type="submit" /></div>
绕过表单提交的疯狂方式:
$("#alternateSubmit").click();
答案 5 :(得分:3)
擦除属性&#34; name&#34;在提交按钮中:
这是你的代码:
MultiResourceItemReader
应该是这样的:
<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />
答案 6 :(得分:0)
尝试一下,为我工作
如果您确实以id或name提交,则需要重命名该表单元素。
如果要在脚本中使用element.submit(),则不能将id =“ submit”赋予表单的任何其他元素。
答案 7 :(得分:-1)
看起来你在一个只在你的onclick处理程序中的ajax帖子后运行的回调中发生了提交。
换句话说,当您单击“提交”时,浏览器必须先出去并点击checkForReplace操作。
答案 8 :(得分:-3)
它的Ajax调用,为什么你需要在使用ajax处理它时提交表单。您可以使用
离开页面window.location.href = "/somewhere/else";