<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();但是窗体不提交(即页面不刷新)。这是为什么?
谢谢!
解决方法
http://api.jquery.com/submit/
jQuery submit()事件添加一个事件侦听器,以在您提交表单时发生。所以你的代码基本上没有绑定到submit事件。如果你想提交表单,你使用老式的JavaScript(document.formName.submit())。
编辑:
我离开我的原始答案完整,指出我在哪里(因为至少有两个人已经downVote我)。我想说的是,如果你有一个这样的函数,它是混乱的为什么你将发布的值在一个ajax部分,然后使用jQuery提交表单。在这种情况下,我将事件绑定到按钮的点击,然后返回true如果你想要返回,否则返回false,像这样
$('#submit').click( function() {
// ajax logic to test for what you want
if (ajaxtrue) { return confirm(whatever); } else { return true;}
});
如果此函数返回true,那么它将成为成功单击提交按钮,并发生正常的浏览器行为。然后,您还以事件处理程序的形式将逻辑与标记分离。
更有意义?