我使用以下代码提交带有AJAX的表单:
<script>
$('#subscribeline #subscribe').click(function(){
$('#subscribeline').html("<form id='subscribeform'><input type='email' name='email' id='email' value='' placeholder='Enter your email'><input type='submit' name='submit' id='submit' value='OK'></form>");
});
$(document).on('submit','#subscribeform', function(){
var postData = $(this).serializeArray();
$.ajax(
{
url : "insertsubscriber.php",
type: "POST",
data : postData,
success:function(data, textStatus, jqXHR)
{
alert('ok');
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('false');
}
});
e.preventDefault();
return false;
});
</script>
现在,事情就是页面的一部分,这段代码本身就是用AJAX加载的。 #subscribeform在页面加载时不存在,所以我在secondPage.php而不是index.php上添加了脚本,以保持清洁和有条理。
整个过程都有效(我收到一个警告框,其中包含&#39; ok&#39; false&#39;),除非它最终实际提交了表单,尽管使用了preventDefault并返回false。
答案 0 :(得分:3)
你缺少'e'
更改此
$(document).on('submit','#subscribeform', function(){
有了这个
$(document).on('submit','#subscribeform', function(e){
答案 1 :(得分:0)
这个怎么样??
<script>
$('#subscribeline #subscribe').click(function(){
$('#subscribeline').html("<form id='subscribeform'><input type='email' name='email' id='email' value='' placeholder='Enter your email'><input type='submit' name='submit' id='submit' value='OK'></form>");
});
$(document).on('submit','#subscribeform', function(e){
e.preventDefault();
var postData = $(this).serializeArray();
$.ajax(
{
url : "insertsubscriber.php",
type: "POST",
data : postData,
success:function(data, textStatus, jqXHR)
{
alert('ok');
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('false');
}
});
});
</script>
答案 2 :(得分:0)
您不需要return false
和e.preventDefault()
。
由于您没有像{GWMaster提到的那样将e
传递给submit
处理程序,因此e.preventDefault()
行上的代码错误因此无法执行,最终提交无论如何这个形式。
删除e.preventDefault()
或将e
传递到处理程序并删除return fasle;
;通常e.preventDefault();
是处理程序中的第一行,但它应该可以在任何位置工作。但是,当您使用return false
时,必须是最后一行,否则您的某些代码将无法执行。