asp.net-mvc - jsFiddle 中的 jQuery 不显眼的自定义适配器和方法

标签 asp.net-mvc jquery-validate jsfiddle unobtrusive-validation

我无法使这个 jsFiddle 工作,但它在浏览器中工作:http://jsfiddle.net/vtortola/jYq2X/

我正在尝试添加一个新的自定义规则来比较两个字段。自定义适配器工作,它被调用并设置选项。但从未调用自定义方法。

我正在准备好 DOM 上执行这个 JS:

$.validator.addMethod("customequal-method", function (val, el, p) {
    var $other = $(el).closest('form').find('input[name=' + p.other + ']'); 
    return $other.length && $other.val() == val;
});

$.validator.unobtrusive.adapters.add("customequal", ["other"],
                                     function (options) {
                                         options.rules["customequal-method"] = options.params;
                                         options.messages["customequal-method"] = options.message;
                                     });



$(function(){
    $.validator.unobtrusive.parse($('#myform'));
    $('[type=button]').click(function(e){e.preventDefault(); $('form').valid();});

    $('input[type=text]').blur();
})

这些是 HTML 中的字段:

    <input type="text" name="StartDate2" id="StartDate2" value="2"
           data-val="true" data-val-customequal="xx xxx" data-val-customequal-other="EndDate2"/>   
    <input type="text" name="EndDate2" id="EndDate2" value="3"
           data-val="true" data-val-customequal="xx xx" data-val-customequal-other="StartDate2"/> 

我一直在尝试不同的方法,但似乎没有任何效果。

有什么想法吗?

最佳答案

你的 fiddle 不工作是因为:

  • 您的所有代码都已准备好在 DOM 中运行,因此您正在添加自定义 unobtrusive.adapters.add在名为 unobtrusive.parse(document) 的 unobtrusive.validator 插件之后它在没有您的自定义验证器的情况下注册所有输入

  • 如果您调用 .validate()多次它只在第一次注册规则并且不会在后续调用中覆盖它们。所以虽然你调用unobtrusive.parse再次在这次加载的 DOM 中添加了自定义适配器,它仍然不会有任何效果。

所以你有两种方法来修复它:

在 DOM 加载事件之前注册您的自定义适配器,您可以通过更改要使用的 fiddle 来做到这一点

"No wrap - in <head>"

演示 JSFiddle .

或者

使用 $('#myform').data('validator', null) 删除已经添加的验证器对象打电话前 unobtrusive.parse手动:

$(function () {
    $('#myform').data('validator', null);

    $.validator.unobtrusive.parse($('#myform'));
    $('[type=button]').click(function (e) {
        e.preventDefault();
        $('form').valid();
    });

    $('input[type=text]').blur();
})

演示 JSFiddle .

关于asp.net-mvc - jsFiddle 中的 jQuery 不显眼的自定义适配器和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805749/

相关文章:

javascript - document.getElements() 支持

javascript - Grid.Mvc.Ajax 扩展网格初始化

jquery - 如何使用 jQuery Validate 在字段为空时显示错误 onblur?

c# - CheckBoxFor 的 MVC 3 自定义 ValidationAttribute 在客户端触发两次

jquery - 如何在jsFiddle中使用ajax请求

javascript - JSFiddle 示例中的 Tooltipster 用法

c# - 以 XML 作为数据源的 Entity Framework 代码优先

asp.net-mvc - 如何从 ASP.NET MVC 中的 View 中找出当前资源和 Controller 名称

asp.net-mvc - ASP.NET MVC 异常处理

asp.net-mvc-3 - 使用ASP.NET MVC 3本地化jQuery验证