我需要在这里和那里做一些事件绑定到同一个函数。我会尽可能地简化我的代码。
这是我的事件绑定:
$(".preset").on("submit",$.proxy(submit_preset,this,"create"));
如果我以匿名$(".preset").on("submit",function(){ etc });
:
function submit_preset(e, url){
e.preventDefault();
var _formdata=new FormData(($(e)[0].target)); //don't mind this weird $(e)[0].target
$.ajax({
url:url,
data:_formdata,
type:'post',
success:function(datapass){
console.log(datapass);
}
});
}
我做错了什么?功能参数还是代理参数?或其他什么?
回答:功能内容可能遗漏了一些东西,但问题是,我觉得反直觉,我不得不交换参数。检查答案的jsfiddle和评论。 :)
答案 0 :(得分:2)
您使用submit_preset()
将form
功能的范围设置为$.proxy
,因此您需要使用this
来引用form
} element,而不是e
,因为它引用了引发的事件。
要修复代码,您需要向this
构造函数提供FormData()
,并在发送时将contentType
和processData
设置为false
二进制数据并交换参数的顺序 - 您首先附加到事件的数据。试试这个:
function submit_preset(url, e) {
e.preventDefault();
$.ajax({
url: url,
type: 'post',
data: new FormData(this),
contentType: false,
processData: false,
success: function(datapass) {
console.log(datapass);
}
});
}