Bootstrap-select - 如何在更改时触发事件
Bootstrap-select - 如何在更改时触发事件
我正在使用Bootstrap 3.0.2和Bootstrap-select插件。
这是我的选择列表:
这是我的JavaScript:
//初始化选择器 $('.selectpicker').selectpicker(); //在更改时需要控制选定值的函数 $('select.selectpicker').on('change', function(){ var selected = $('.selectpicker option:selected').val(); alert(selected); });
问题
我的问题是change函数不起作用。它什么也不做,我找不到解决办法。
如果我将它放在document ready中而不是change函数中,它似乎可以工作。所以我猜我在这里犯了一个错误:
$('select.selectpicker').on('change', function(){
我还尝试仅使用:
$('.selectpicker').on('change', function(){
没有使用这个选择前缀,但是什么也没有改变。
更新
将jQuery代码放入document.ready()
中即可解决。感谢Kartikeya的帮助。
问题的原因:在使用Bootstrap-select插件时,想要在下拉菜单选项改变时触发事件,但是尝试使用的代码并不能正确获取到最后一个未选择的选项的值。
解决方法:使用另外一个解决方案,通过点击事件来获取被点击选项的值。具体的解决方法可以参考这个答案:https://stackoverflow.com/questions/36944647
问题的原因是Bootstrap Select使用自定义的div元素来与原始的
解决方法1 - 原生事件:
只需监听change事件,并使用javascript或jQuery获取所选值,如下所示:
$('select').on('change', function(e){ console.log(this.value, this.options[this.selectedIndex].value, $(this).find("option:selected").val(),); });
注意:与任何依赖于DOM的脚本一样,在执行之前,确保等待DOM准备就绪的事件。
解决方法2 - Bootstrap Select自定义事件:
Bootstrap Select有一系列自定义事件,其中包括changed.bs.select事件,用于在select的值更改后触发。它传递事件、点击的索引、新值和旧值。可以像这样使用它:
$("select").on("changed.bs.select", function(e, clickedIndex, newValue, oldValue) { console.log(this.value, clickedIndex, newValue, oldValue) });
另一个解决方法是使用上述解答中提到的方法,并标识两者之间的不同之处。请注意在option标签中将val=更改为value=。