更新到Jquery 1.9.0时jquery.unobtrusive-ajax插件坏了

可能重复:
jQuery 1.7 – 将live()转换为on()

//解决方案:我只是简单地替换了四个事件,如建议的批准答案和不显眼的ajax插件已启动并再次使用jquery 1.9.0

更新//观察底部标记答案的注释,这是解决此问题的最佳方法。

//原帖:我升级到jQuery 1.9.0,但随后他们弃用了live方法,因此不引人注意的ajax插件崩溃了。 我尝试更换它,因为升级为我修复了另一个错误。 但是,它不起作用。 我只是简单地用以下方式取代了:

$("a[data-ajax=true]").on("click", function (evt) { evt.preventDefault(); asyncRequest(this, { url: this.href, type: "GET", data: [] }); }); $("form[data-ajax=true] input[type=image]").on("click", function (evt) { var name = evt.target.name, $target = $(evt.target), form = $target.parents("form")[0], offset = $target.offset(); $(form).data(data_click, [ { name: name + ".x", value: Math.round(evt.pageX - offset.left) }, { name: name + ".y", value: Math.round(evt.pageY - offset.top) } ]); setTimeout(function () { $(form).removeData(data_click); }, 0); }); $("form[data-ajax=true] :submit").on("click", function (evt) { var name = evt.target.name, form = $(evt.target).parents("form")[0]; $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []); setTimeout(function () { $(form).removeData(data_click); }, 0); }); $("form[data-ajax=true]").on("submit", function (evt) { var clickInfo = $(this).data(data_click) || []; evt.preventDefault(); if (!validate(this)) { return; } asyncRequest(this, { url: this.action, type: this.method || "GET", data: clickInfo.concat($(this).serializeArray()) }); }); 

live使用(委托)的等价物是:

 $(document).on("click","a[data-ajax=true]", function (evt) {...}); 

你可以在这里找到jquery的.on()方法文档:

>> http://api.jquery.com/on/ <<

.on()方法将事件处理程序附加到jQuery对象中当前选定的元素集。 从jQuery 1.7开始,.on()方法提供了附加事件处理程序所需的所有function。 有关从旧的jQuery事件方法转换的帮助,请参阅.bind() ,. delegate().live()

要删除与.on()绑定的事件 ,请参阅.off () 。 要附加仅运行一次然后自行删除的事件,请参阅.one()