2013-05-09 69 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()函數,則不會觸發事件。

好吧,深思熟慮,你真正的問題 - 文件上傳 - 比我的回答難一點。通過評論鏈接問題對此有一個很好的答案;)

相關問題