bootstrap选择事件参数

时间:2016-02-11 20:19:08

标签: jquery twitter-bootstrap bootstrap-select

我正在使用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);
});

4 个答案:

答案 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)

这不是错误。似乎newValueoldValue的行为与您的预期不符。 newValueoldValue都以相同的方式运作。 您看到的布尔值指的是所选选项的上一个和新状态。

true代表已选中,false代表未选中。

如果新选择的选项之前未处于选定状态,则会返回如下状态:

newValue: trueoldValue: false

如果之前选择了所选的选项,它将返回如下:

newValue: falseoldValue: 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()
});