Jquery - 将event.data传递给.on()和.bind()

时间:2015-06-09 17:12:54

标签: jquery ajax

根据我的理解,jQuery的未来版本将不会bind,所以我尝试使用on。我遇到了一个问题。

我想了解为什么bind允许我设置event.data,但on没有。{I}}

这有效

$(document).bind('ajaxError', '#form-id', function(event, jqxhr, settings, exception){
  $(event.data).render_form_errors($.parseJSON(jqxhr.responseText));
});

这不起作用

$(document).on('ajaxError', '#form-id', function(event, jqxhr, settings, exception){
  $(event.data).render_form_errors($.parseJSON(jqxhr.responseText));  
});

我在一个页面上有多个表单,所以我试图为每个特定表单呈现错误。

1 个答案:

答案 0 :(得分:4)

那是因为on()的第二个参数是选择器,而不是事件数据(因为on()也意味着取代delegate())。

您案例中on()的正确语法是:

$(document).on('ajaxError', null, '#form-id', function(event, jqxhr, settings, exception) {
    $(event.data).render_form_errors($.parseJSON(jqxhr.responseText));  
});

顺便说一句,请注意,据我所知,没有官方消息称​​未来版本的jQuery不会有bind() on()确实意味着取代bind()delegate(),但这两种方法都不被弃用,并且在可预见的将来两者都很可能会出现(有很多代码仍然存在)使用它们。)