<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,那么它将成为成功单击提交按钮,并发生正常的浏览器行为。然后,您还以事件处理程序的形式将逻辑与标记分离。
更有意义?