我正在使用bootstrap select插件(http://silviomoreto.github.io/),我正在处理更改事件“changed.bs.select”以捕获任何选择更改。根据{{3}}处的文档,“此事件在select的值更改后触发。它通过事件,clickedIndex,newValue,oldValue。”
我想了解newValue和oldValue究竟代表什么。因为始终是新值为true且oldValue为false的情况。
这是一个说明我的观点的小提琴。
https://silviomoreto.github.io/bootstrap-select/options/
HTML
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<div class="res">
Waiting for a change event
</div>
的jQuery
$(".selectpicker").on('changed.bs.select', function (event, clickedIndex, newValue, oldValue) {
$("div.res").html("newValue: " + newValue + "<BR>oldValue: " + oldValue);
});
答案 0 :(得分:4)
如果您希望有预期的行为,只需更改
that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
到
that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('value'), prevValue]);
在你的bootstrap-select.js
中答案 1 :(得分:3)
这不是错误。似乎newValue
和oldValue
的行为与您的预期不符。
newValue
和oldValue
都以相同的方式运作。
您看到的布尔值指的是所选选项的上一个和新状态。
true
代表已选中,false
代表未选中。
如果新选择的选项之前未处于选定状态,则会返回如下状态:
newValue: true
和oldValue: false
如果之前选择了所选的选项,它将返回如下:
newValue: false
和oldValue: true
因为它取消了该元素。
这是由caseyjhol在这里解决的:
https://github.com/silviomoreto/bootstrap-select/issues/1378/#issuecomment-216393099
答案 2 :(得分:2)
newValue
表示新选择的选项“已选择”属性,而oldValue
表示先前选择的选项的“已选择”属性。由于将始终选择新选项并且始终取消选择旧选项,因此它们分别返回true和false。这可能是bootstrap select开发人员的错误 - 似乎他们打算传递选项元素本身或选项值,而不是它们的“选定”属性。
答案 3 :(得分:1)
我也遇到了这个问题。感谢TAGraves解释发生了什么。使用这样的解决方案结束:
<强>的jQuery 强>
$(".selectpicker").on('changed.bs.select', function (event, clickedIndex, newValue, oldValue) {
var Value = $(".selectpicker option:selected").val()
});