表单仍然使用preventDefault提交并返回false

时间:2014-06-22 22:42:54

标签: jquery ajax forms

我使用以下代码提交带有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。

3 个答案:

答案 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 falsee.preventDefault()

由于您没有像{GWMaster提到的那样将e传递给submit处理程序,因此e.preventDefault()行上的代码错误因此无法执行,最终提交无论如何这个形式。

删除e.preventDefault()或将e传递到处理程序并删除return fasle;;通常e.preventDefault();是处理程序中的第一行,但它应该可以在任何位置工作。但是,当您使用return false时,必须是最后一行,否则您的某些代码将无法执行。

相关问题