TypeError:e.preventDefault不是函数

时间:2016-03-16 11:32:27

标签: javascript jquery ajax

我是javascript和jquery的新手。我在这段代码中使用了两个jquery插件。一个是Jquery表单验证器,另一个是Jquery表单ajaxSubmit。使用正常的ajax提交代码工作正常,但现在我也必须发布一个文件。所以我使用的是ajaxSubmit。当我运行这个时,我得到一个错误" TypeError:e.preventDefault不是一个函数"在浏览器控制台上

请不要将此标记为重复的问题,因为有关同一主题的其他问题的答案对我不起作用。

<script type="text/javascript">
    $(document).ready(function() {

        $("#addpost").validate({
            rules: {
                subject: "required",
                comment: "required"
            },
            messages: {
                subject: "Please enter a subject",
                comment: "Please enter some details",                   
            },
            submitHandler: function(e){
                e.preventDefault();
                $.ajaxSubmit({
                    url: '/addpost',
                    type: 'post',
                    dataType: 'html',
                    data : $( "#addpost" ).serialize(),
                    success : function(data) {
                        location.reload();
                    }
                });
            }
        });     

    }); 
</script>

解决我的问题的方法是更改​​submithandler,如下所示: -

submitHandler: function(form){
    $(form).ajaxSubmit({
            url: '/addpost',
            type: 'post',
            dataType: 'html',
            data : $( "#addpost" ).serialize(),
            success : function(data) {
                location.reload();
            }
     });
    return false
}

希望这会对某人有所帮助。

3 个答案:

答案 0 :(得分:3)

我不确定您是否会在提交处理程序中使用e.preventDefault()

删除该行,然后在ajax提交后添加return false;。 这样就无法提交表格。

答案 1 :(得分:1)

您在e中使用的submitHandler未提供事件对象。它提供了您正在验证的表单对象!因此你得到的错误。请阅读文档1,以便了解您正在处理的对象和回调。

[1 - link]

答案 2 :(得分:1)

您的e无事件,但是表单元素。像这样改变你的代码:

submitHandler: function(form,e){ // place your element on second parameter
            e.preventDefault();
            $.ajaxSubmit({
                url: '/addpost',
                type: 'post',
                dataType: 'html',
                data : $( "#addpost" ).serialize(),
                success : function(data) {
                    location.reload();
                }
            });
        }