10

选择框转换为 Select2,不会自动与 ASP.NET MVC 框架中的不显眼的验证机制集成。
例如,在包含常规选择框的表单上(在模型定义中标记为必填),在选择框中没有选择任何选项的情况下提交表单,将导致选择框的边框和背景呈现偏红色,并且通过使用@Html.ValidationMessageFor,可以在框旁边显示错误消息(如果有)。但是,如果将选择框转换为 Select2 组件,则上述功能将不再起作用。甚至验证错误消息也不会出现。
似乎连验证错误消息都没有显示的原因,是因为 Select2 将原始选择框的显示 CSS 属性更改为无(显示:无),我猜不显眼的验证脚本不会打扰为不可见生成错误消息字段。

有什么想法/解决方案吗?

4

4 回答 4

13

这个问题并不是 Select2 所特有的,而是 jQuery 不显眼的验证器所特有的。

您可以打开此答案中突出显示的隐藏字段的验证。

$.validator.setDefaults({
    ignore: ''
});

正如评论所指出的,它在$(document).ready(). 我不得不把它放在顶层。

于 2013-01-04T08:16:54.467 回答
1

我在 select2 插件上遇到了类似的问题。我不确切知道您具体使用了哪些功能,但根据我的经验,当您在document.ready事件中将元素设置为 select2 时,插件将即时更改元素的一些属性(检查其中一个元素后您的页面已完成加载 - 通常您会看到 id 和 class 属性与查看源代码时看到的不同)。

如果没有实际看到代码,很难提供更多内容,但这里有一些想法可以帮助您入门:

首先,显然确保您在标题中有指向您的 select2.css 样式表的链接。

然后,由于您正在谈论表单提交,我建议您检查您是否正在获得完整的回发或通过 AJAX 提交(如果您使用的是 jQueryMobile,那么您正在使用 AJAX,除非您在jquerymobile.js 文件或data-ajax="false"在表单属性中设置一个)。你可以看看这个返回的值Request.IsAjaxRequest()。显然,如果您通过 ajax 提交,您将不会点击 document.ready 事件,并且 select2 将无法正确初始化,您需要想办法解决这个问题。提交后尝试刷新页面,看看它是否呈现了 select2 组件。

然后我建议检查这些元素,看看它们的行为是否不像你期望的那样,因为你实际上是在尝试使用插件在运行时重新分配的类。您既可以调整逻辑,也可以深入研究 select2 代码本身并更改行为 - 它实际上已经很好地记录了代码在做什么,如果您跳上 select2 的 Google 组,Igor 通常很快跟进问题。

于 2012-12-21T21:25:17.163 回答
-1

像这样

$('select').on('select2:select', function (evt){  
        $(this).blur();  
});  
于 2017-09-08T01:13:42.373 回答
-2

$('body').on('change', 'select.m-select2', function () {

$(this).blur();

})

于 2018-03-28T20:06:21.553 回答