2013-05-09 82 views
3

我用于使用submit(callback) jQuery方法,在回调中,我序列化表单并执行ajax post调用。如何使用JavaScript发送表单而不被重定向?

但是这一次,我需要上传一个文件,而这个方法desn't似乎工作,所以我尝试直接提交表单与submit() jQuery的方法,但我不能够避免重定向,我然而我打电话e.preventDefault();前:

$('form.input.upload').change(function(e) { 
    e.preventDefault(); 
    $('form.example').submit(); 
}); 
+0

@apsillers serialize不序列化文件类型输入。他需要为此单独使用一个jQuery插件,或者将表单提交给隐藏的iframe(这不会很好,但它可以很好地完成小型上传)。 – Paulpro 2013-05-09 16:30:04

+0

HTML表单提交需要重定向。你使用Ajax的直觉是正确的 - 然而,'.serialize'不处理''的文件数据,所以你需要使用'FileReader'来自己收集。 – apsillers 2013-05-09 16:30:26

+1

[我怎样才能上传文件与jQuery异步?](http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously-with-jquery) – apsillers 2013-05-09 16:36:08

回答

0

你要做preventDefaultonsubmit事件<form>的,而不是在onchange事件<input>的:

$("form.example").on("submit", function (e) { 
    // preventing browser's native form submit 
    e.preventDefault(); 
}); 

$("form.example input.upload").on("change", function (e) { 
    // auto-submit if input.upload changed 
    $("form.example").submit(); 
}); 

更新:在我编辑之前,我不完全正确。通过点击<input type="submit">或在任何集中的<input>中按回车,即可触发onsubmit事件。但是:如果以编程方式调用submit()函数,则不会触发事件。

好吧,深思熟虑,你真正的问题 - 文件上传 - 比我的回答难一点。通过评论链接问题对此有一个很好的答案;)

相关问题