英文:
File value is undefined in jQuery click
问题
以下是要翻译的内容:
在我的项目中,所有表单都相似,所以我想编写一个点击函数来运行它们。以下代码除了文件外都可以正常工作。文件值输出为 undefined。我该如何将文件附加到这个表单数据中?这是我的点击函数:
$("#save_form").click(
function(event){
event.preventDefault();
var formData = {};
$('.form-value').each(function() {
var id = $(this).attr('id');
var value;
if ($(this).is('select')) {
value = $(this).find('option:selected').val();
} else if ($(this).is(':file')) {
value = $(this)[0].files[0].value; // 返回 undefined。
} else {
value = $(this).val();
}
formData[id] = value;
});
console.log(formData);
当我不使用 .value
时:
value = $(this)[0].files[0]
我得到:
Uncaught TypeError: Illegal invocation
英文:
In my project, all forms are similar to each other, so I want to write one click function to run all.
Following code works fine except files. File value outputs as undefined. How can I attach file to this form data?
Here's my click function:
$("#save_form").click(
function(event){
event.preventDefault();
var formData = {};
$('.form-value').each(function() {
var id = $(this).attr('id');
var value;
if ($(this).is('select')) {
value = $(this).find('option:selected').val();
} else if ($(this).is(':file')) {
value = $(this)[0].files[0].value; // Returns undefined.
} else {
value = $(this).val();
}
formData[id] = value;
});
console.log(formData);
When I use without value:
value = $(this)[0].files[0]
I get:
Uncaught TypeError: Illegal invocation
答案1
得分: 3
只使用文件本身。文件没有value
属性。
value = this.files[0];
要使用jQuery.ajax
发送FormData
,请添加选项processData: false
和contentType: false
,以防止jQuery尝试转换FormData
。
英文:
Just use the file itself. Files do not have a value
property.
value = this.files[0];
To send the FormData
with jQuery.ajax
, add the options processData: false
and contentType: false
to prevent jQuery from trying to convert the FormData
.
答案2
得分: 2
借助David和Unmitigated的帮助,我解决了这个问题。
-
我发送的是文件,而不是数值。
value = $(this)[0].files[0];
-
然后,我添加了两行到ajax(processData和contentType设置为false)
method: 'POST', data: formData, processData: false, contentType: false,
英文:
With the help of David and Unmitigated, I solved the issue.
-
I send file, not the value.
value = $(this)[0].files[0];
-
And than, I added two lines to ajax (processData and contentType as false)
method: 'POST', data: formData, processData: false, contentType: false,
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论