我是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
}
希望这会对某人有所帮助。
答案 0 :(得分:3)
我不确定您是否会在提交处理程序中使用e.preventDefault()
。
删除该行,然后在ajax提交后添加return false;
。
这样就无法提交表格。
答案 1 :(得分:1)
您在e
中使用的submitHandler
未提供事件对象。它提供了您正在验证的表单对象!因此你得到的错误。请阅读文档1,以便了解您正在处理的对象和回调。
答案 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();
}
});
}