如何在不修改JQuery.validate.unobtrusive.min.js的情况下重写JQuery unobtrusive方法?

如何在不修改JQuery.validate.unobtrusive.min.js的情况下重写JQuery unobtrusive方法?,jquery,validation,overriding,Jquery,Validation,Overriding,我想覆盖jquery.validate.unobtrusive.js中的onErrors方法,将错误消息显示为指向html元素的超链接。但是,我不想更改jquery.validate.unobtrusive.js中的方法,因为该文件会随着新版本的可用而更新。我已经读到,我可以创建一个外部JS文件,并在其中包含onErrors函数。在我的html文件中,如果在包含jquery.validate.unobtrusive.JS之后包含外部JS文件,那么它应该自动覆盖jquery.validate.un

我想覆盖jquery.validate.unobtrusive.js中的onErrors方法,将错误消息显示为指向html元素的超链接。但是,我不想更改jquery.validate.unobtrusive.js中的方法,因为该文件会随着新版本的可用而更新。我已经读到,我可以创建一个外部JS文件,并在其中包含onErrors函数。在我的html文件中,如果在包含jquery.validate.unobtrusive.JS之后包含外部JS文件,那么它应该自动覆盖jquery.validate.unobtrusive.JS中的方法。这并没有发生

请注意,我使用jquery.validate.unobtrusive.min.js,函数从onErrors重命名为k。我尝试在我的外部JS文件中创建一个名为“k”的函数,但没有成功


谢谢

当两个函数都放置在全局命名空间中时,可能会发生重写。对于jquery.validation.unobtrusive.js函数,onErrors在其他函数内部声明,不能通过使用相同名称声明其他函数来替换

如果不更改源代码,似乎无法更改该函数。

您可以通过提供不同的选项来更改默认OneErrors,因为它是可重写的。
无需更改源代码或重写内置函数。

无需修改原始jquery.validate.unobtrusive.js。答案是这样的:

但是您必须小心:如果您只是在实现中更改errorPlacement,那么即使出现错误,表单也可能会提交。为了避免这种情况,您需要保留jquery.validate.unobtrusive.js的onError函数的内容

将此代码放在您的一个文件中:

var $form = $("form.edit-form")
    var validator = $form.data('validator');

validator.settings.errorPlacement = $.proxy(onError, $form);

function onError(error, inputElement) {
    //Original code of the onError function inside jquery.validate.unobtrusive
    //------------------------------------------------------------------------
    var container = $(this).find("[data-valmsg-for='" + inputElement[0].name + "']"),
        replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;

    container.removeClass("field-validation-valid").addClass("field-validation-error");
    error.data("unobtrusiveContainer", container);

    if (replace) {
        container.empty();
        error.removeClass("input-validation-error");
    }
    else {
        error.hide();
    }

    //END of Original code of the onError function inside jquery.validate.unobtrusive
    //-------------------------------------------------------------------------------

    //Do whatever you want here, in my case I'm using qTip to show the errors
    var element = inputElement;
    // Set positioning based on the elements position in the form
    var elem = $(element);

    // Check we have a valid error message
    if (!error.is(':empty')) {
        // Apply the tooltip only if it isn't valid
        elem.filter(':not(.valid)').qtip({
            overwrite: false,
            content: error,
            position: {
                my: 'left middle',
                at: 'right middle',
                viewport: $(window)
            },
            show: {
                event: false,
                ready: true
            },
            hide: false,
            style: {
                classes: 'ui-tooltip-red' // Make it red... the classic error colour!
            }
        })

        // If we have a tooltip on this element already, just update its content
        .qtip('option', 'content.text', error);
    }

        // If the error is empty, remove the qTip
    else { elem.qtip('destroy'); }
}

你能把链接贴到你可能读到的地方吗?我看过缩小的文件,认为你很难做到这一点。是的,发布一些代码,让我们知道你尝试了什么。