2017-04-19 81 views
1

我需要做一些事件绑定在这里和那里到相同的功能。我会尽量简化我的代码。与jQuery代理发生故障

这是我的事件绑定:

$(".preset").on("submit",$.proxy(submit_preset,this,"create")); 

这是,如果我做得一样annonymous $(".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); 
      } 
     }); 
    } 

我在做什么错?函数参数或代理参数?或者是其他东西?

Post-answer:功能内容可能已经错过了某些东西,但问题是,我发现反直觉,我不得不交换参数。检查答案的jsfiddle和评论。 :)

+0

你能调用这个函数'submit_preset'与该事件绑定('$ .proxy')? –

+0

是的,我试图在函数中提醒(“测试”),当我提交表单时,弹出 – Cr1xus

回答

2

你使用$.proxysubmit_preset()功能的范围设定为form因此,你需要使用this来引用form元素,而不是e,因为这是指引发的事件。

要解决你的代码,你需要提供thisFormData()构造,设置contentTypeprocessDatafalse为你发送二进制数据交换参数的顺序 - 你追加到事件中的数据是第一位的。试试这个:

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

+0

这个提示,谢谢你的回答,我没有包括processData和contentType,我没有把它放在这里使其更短。但** url **参数不起作用,因为我试图提醒它,加上我的动作与GET方法在同一页上。 – Cr1xus

+0

是否“创建”你想要拨打的网址? –

+0

是的,我在路由中使用laravel – Cr1xus