遇到jquery代理问题

时间:2017-04-19 09:26:35

标签: jquery

我需要在这里和那里做一些事件绑定到同一个函数。我会尽可能地简化我的代码。

这是我的事件绑定:

$(".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和评论。 :)

1 个答案:

答案 0 :(得分:2)

您使用submit_preset()form功能的范围设置为$.proxy,因此您需要使用this来引用form } element,而不是e,因为它引用了引发的事件。

要修复代码,您需要向this构造函数提供FormData(),并在发送时将contentTypeprocessData设置为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);
    }
  });
}

Working example