将jquery验证附加到替换元素

时间:2015-11-26 10:03:58

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

我有一个带有下拉列表的aspnet mvc表单,我用一个jquery组合框代替。

原始下拉列表中有一个客户端验证设置 - 使用不显眼的lib和标准的jquery验证 - 我希望这个验证附加到组合框。

作为组合框生成的一部分,名称将从滴管中移除,而是设置在隐藏字段上。 我面临的问题是,当组合框无效时(在这种情况下为空),验证消息不会显示在组合框(隐藏字段)中。

有没有办法连接隐藏字段来验证,因为下拉列表会有? 我尝试了几件事:

  1. 将隐藏字段的名称设置为下拉列表名称 - 复制data-val和data-val-required属性,但我没有运气。我意识到,由于隐藏字段是动态添加的,验证器不会提取它,但是当验证通过名称(afaik)选择时它可能正常工作。我试图重新解析表单,以便它拾取隐藏的字段,但原始规则仍然存在 - 这似乎不起作用。
  2. 我也尝试过不使用隐藏字段并将验证留在原始dropper上 - 当组合框中的项目设置时,也会在dropper中设置值。这也不起作用 - 我认为因为下拉是隐藏的,因为如果我离开它显示验证工作正常。
  3. 我正在使用 bootstrap jquery combobox,我稍微修改了它以使用选项组

    有人可以提供一些帮助吗?

    感谢

1 个答案:

答案 0 :(得分:4)

您正在使用的插件会隐藏输入并将其替换为自己的html。默认情况下,jQuery验证不会验证隐藏的表单控件,但您可以通过修改验证程序

来覆盖此行为
$.validator.setDefaults({ 
    ignore: [] 
});

请注意,如果您有其他不需要验证的隐藏元素,那么您可以为该元素指定一个类名

$.validator.setDefaults({ 
    ignore: ":hidden:not('.combobox')"
});

注意:确保此脚本位于$(document.ready)函数之外。