以前的问题(关于这个主题)和答案都是4-5年前的,是指各个项目的旧版本。
在项目中,我使用的是
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上现有的类似问题,并尝试了大部分建议,但他们参考了旧版本的库,并不适用于当前的情况,因为在新版本的库中使用了不同的代码结构。
根本不是这样的。 並沒有複製貼上cookie-cutter的方法,但想法和之前的版本完全一樣。
而jQuery Validate则是看底层的隐蔽性。select
元素,用户正在与Select2元素进行交互。 因此,你必须构建一个自定义的事件处理程序,以实用的方式触发对隐藏元素的验证。 如这些老答案中也有显示。
https:/stackoverflow.coma30881932594235。
https:/stackoverflow.coma46953372594235。
和我2014年的一个...
https:/stackoverflow.coma26046295594235
这些答案的核心概念与解决你的问题的方法完全一样,都有以下共同点......
在一些合适的事件上,通过编程触发验证底层的 select
元素。
$('#selectElement').on('event', function() {
$('select').valid();
});
解决办法:
和以前的版本和集成一样,它只是需要一些外部事件处理程序来触发所需的动作。
严格地回答你的问题,创建一个事件处理程序,当你把焦点从select中移出时就会触发。 请记住,Select2取代了默认的 select
jQuery Validate在隐藏的DOM中工作。select
而用户只与Select2元素交互。
$('.select2').on('focusout', function() { // focus out of Select 2
$mySelect.valid(); // trigger validation of hidden select
});
DEMO: jsfiddle.netn91g8xfm
然而,我会更进一步,每当选择的值发生变化时,就会触发验证,这样效果是即时的。
$mySelect.on('change', function() { // change value of hidden select
$(this).valid(); // trigger validation of hidden select
});
DEMO 2: jsfiddle.netgkzeoq1v