当升级到Jquery 1.9.0时,jquery.unobtrusive-ajax插件失效。

15

可能是重复问题:
jQuery 1.7 - 将 live() 转换为 on()

//解决方案:像批准的答案建议的那样,我简单地替换了四个出现的位置,无侵入式 ajax 插件就可以在 jquery 1.9.0 上正常工作了。

更新 //请注意底部标记的答案的评论,这是解决此问题的最佳方法。

//原始帖子: 我升级到 jQuery 1.9.0,但是无侵入式 ajax 插件崩溃了,因为它们已弃用 live 方法。我尝试像这样替换它,因为升级对我修复了另一个错误。但是,它不起作用。我只是将 live 替换为 on,就像这样:

$("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())
        });
    });

你可以从搜索stackoverflow或阅读文档开始。https://dev59.com/kmsz5IYBdhLWcg3wQFe2 http://api.jquery.com/on/ - Kevin B
13
@KevinB的回复有点严厉而且没什么帮助:/ 我遇到了同样的问题并在Google和Stackoverflow上搜索,我找到了这个问题但从未看到你链接的那个。 - Cocowalla
我猜有些人只是在想好的搜索词方面遇到了麻烦。例如,这个问题是“将.live转换为.on jQuery”,我得到的前6个结果都展示了如何将.live转换为.on的好例子。 - Kevin B
7
我想我本可以更好地表达我的问题,但我的意图是让搜索不显眼的ajax问题的其他人发现这个答案。并非所有遇到不正常的不显眼ajax的人都知道其.find已被弃用。 - Magnus Karlsson
1
这个问题是关于jQuery Unobtrusive Ajax的,而提出的重复问题则不是。这里的解决方案是获取最新版本的jQuery Unobtrusive Ajax(已经修复使用.on()),而不是手动修改它。 - JLRishe
1个回答

12

使用事件委托实现live的等效方法是:

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

您可以在此处找到 jQuery 的 .on() 方法文档:

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

.on() 方法将事件处理程序附加到 jQuery 对象中当前选定的元素集合。自 jQuery 1.7 版本以来,.on() 方法提供了所有所需的附加事件处理程序的功能。如需帮助从旧版 jQuery 事件方法进行转换,请参阅 .bind().delegate().live()

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


请注意,这里还有一些解决方法 - http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive - Simon_Weaver
2
将jquery.validate升级到1.11.0(今天发布):https://nuget.org/packages/jQuery.Validation/1.11.0 - Simon_Weaver
现在有一个更新版本的jquery.validate:https://www.nuget.org/packages/jQuery.Validation/ - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接