【问题标题】:jquery validation plugin not working with unobtrusive js referencejquery 验证插件不适用于不显眼的 js 参考
【发布时间】:2013-09-21 17:58:51
【问题描述】:

我有一个 MVC4 项目正在使用不显眼的验证,但是对于一个部分,我使用了 knockoutjs。

我已设置淘汰赛以使用 jquery 验证插件,但是当我调用 $("form").valid() 时,它的行为不符合预期。

我在表单中渲染了一个表格,其中有几行需要验证。表格的第一行应该在验证中被忽略,并用于将新对象添加到列表中。我已经给第一行中的每个对象一个“firstRow”类

我已经设置了验证器

var validator = $("form").validate({
                ignore: ".firstRow"
            });

但是当我打电话时

$("form").valid()

我注意到所有无效的元素(包括第一行)都添加了“input-validation-error”类。

首先,我希望第一行会被忽略。

其次,我不希望应用此类,因为这样做是不显眼的验证。我希望应用类“错误”而不是 jquery 验证插件。

当我排除对 jquery.validation.unobtrusive.js 的引用时,一切正常,但我不能这样做,因为站点的其余部分需要它。

我认为这是从 jquery.validation.unobtrusive 以某种方式执行的代码,但我想知道如何阻止它执行?

function validationInfo(form) {
    var $form = $(form),
        result = $form.data(data_validation),
        onResetProxy = $.proxy(onReset, form);

    if (!result) {
        result = {
            options: {  // options structure passed to jQuery Validate's validate() method
                errorClass: "input-validation-error",
                errorElement: "span",
                errorPlacement: $.proxy(onError, form),
                invalidHandler: $.proxy(onErrors, form),
                messages: {},
                rules: {},
                success: $.proxy(onSuccess, form)
            },
            attachValidation: function () {
                $form
                    .unbind("reset." + data_validation, onResetProxy)
                    .bind("reset." + data_validation, onResetProxy)
                    .validate(this.options);
            },
            validate: function () {  // a validation function that is called by unobtrusive Ajax
                $form.validate();
                return $form.valid();
            }
        };
        $form.data(data_validation, result);
    }

    return result;
}

【问题讨论】:

  • 你看过Knockout-Validation吗?
  • 我还没有,因为 knockoutjs 页面上的示例使用的是 jquery 验证器。

标签: jquery validation knockout.js unobtrusive


【解决方案1】:

我最终拆分了包并将 jquery.validator 文件放在一起,并将不显眼的文件放在另一个包中。

然后在我的布局文件中,我使用 Viewbag 检查是否应该包含不显眼文件的捆绑包。

默认情况下它将包括 then 除非 Viewbag.ExcludeUnobtrusive == true,这将在我不想要不显眼的脚本引用的页面中设置。

布局文件

@{
var includeUnobtrusive = ViewBag.ExcludeUnObtrusive == null || ViewBag.ExcludeUnObtrusive   == false;
}
....
....
 @if (includeUnobtrusive)
{
    @Scripts.Render("~/bundles/jqueryunobtrusive")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多