不重复
以前的问题(关于这个主题(和答案是 4-5 年前的,并参考相应项目的旧版本。
地位
在我正在使用的项目中:
- 引导程序 v4.4.1
- j查询验证插件 v1.19.1
- 选择2 v4.0.13
- 选择2 引导4主题 v1.3.2
问题所在
Bootstrap4
与jQuery validation plugin
配合得很好。
jQuery validation
不适用于开箱即用Select2
。
我设法为valid/invalid state
添加了大纲.
然而,我无法让它消失on blur
(单击页面的白色区域不受控制(,就像只有Bootstrap4
和jQuery validation
一样。
例子
我创建了 2 个显示问题的 JSFiddle-s。
jQuery Validation
+bootstrap4
= 按预期工作:示例 1
jQuery Validation
+bootstrap4
+Select2
= 问题:示例 2
结论
我已经仔细查看了现有的类似问题StackOverflow
并尝试了大多数建议,但它们引用了旧版本的库,不适用于当前情况,因为在新版本的库中使用了不同的代码结构......所以旧的解决方案不再有效...我试图在应用解决方案时解释这一点,但无济于事。
在这一点上,我被困住了。
感谢您的想法和建议!
我仔细研究了现有的类似问题 StackOverflow并尝试了大多数建议,但他们参考了 旧版本的库,不适用于当前情况,如 新版本的库使用了不同的代码 结构。。。
事实并非如此。 没有复制/粘贴千篇一律的方法,但是这个想法与以前的版本完全相同。
当 jQuery Validate 查看底层隐藏的select
元素时,用户正在与 Select2 元素进行交互。因此,您必须构造一个自定义事件处理程序,该处理程序实际上会触发对隐藏元素的验证,如这些较旧的答案所示。
https://stackoverflow.com/a/30881932/594235
https://stackoverflow.com/a/46953372/594235
还有我 2014 年的一个......
https://stackoverflow.com/a/26046295/594235
这些答案的核心概念与用于解决您的问题的概念完全相同,并且都具有以下共同点......
在某个适当的事件上,以编程方式触发基础select
元素的验证。
$('#selectElement').on('event', function() {
$('select').valid();
});
解决方案:
与以前的版本和集成一样,它只需要一些外部事件处理程序来触发所需的操作。
严格回答您的问题,创建一个事件处理程序,当您将焦点从选择之外时触发。 请记住,Select2 替换了 DOM 中的默认select
。 jQuery Validify正在处理隐藏select
,而用户只与Select2元素交互。
$('.select2').on('focusout', function() { // focus out of Select 2
$mySelect.valid(); // trigger validation of hidden select
});
演示:jsfiddle.net/n91g8xfm/
但是,我会更进一步,并在所选值更改时触发验证,以便效果立即生效。
$mySelect.on('change', function() { // change value of hidden select
$(this).valid(); // trigger validation of hidden select
});
演示 2:jsfiddle.net/gkzeoq1v/