[英]Bootstrap multiselect blur event not triggering
在用户完成选择并离开引导程序多选下拉菜单后,我正在尝试做一些逻辑。
我尝试连接到模糊事件:
<select id="select1" multiple="multiple" class="form-control" data-bind="options: availableValues, selectedOptions: selectedValues, multiselect: {
includeSelectAllOption: true
}, event: { blur: $root.onBlur}">
</select>
在我的 viewModel 中定义一个 onBlur 函数:
onBlur: function(){
alert('OnBlur');
}
但它永远不会启动。 我什至尝试在没有$root.onBlur
情况下直接设置事件绑定,只是blur: onBlur
但没有用。
这是一个示例 JS 小提琴:
https://jsfiddle.net/gtzatrL2/
我错过了什么吗? 还是模糊事件不适用于引导多选?
我想要模糊的原因是因为在选择了所有项目后,我有一些后端逻辑要通过 Ajax 来完成。 如果我订阅我的 observableArray 更改,它将触发我对添加的每个项目的后端调用,这不是我想要的。
Bootstrap 实际上隐藏了原始的 select 元素并在其位置显示了一个 div,因此 select 上的模糊永远不会被击中,因为它首先没有被聚焦。
我认为因为引导控件使用 div,所以可能根本不可能支持模糊,因为 div 通常不可聚焦。 有几种解决方法,但在这种特殊情况下可能不起作用。 请参阅如何模糊 div 元素?
一种选择 - 您可以对 observableArray 进行速率限制,以便每次选择一个选项时都不会立即触发订阅。 这也将减少后端调用,但并不能保证它不会在用户完成之前触发。
http://knockoutjs.com/documentation/rateLimit-observable.html
this.selectedValues = ko.observableArray().extend({ rateLimit: { timeout: 500, method: "notifyWhenChangesStop" } });
this.selectedValues.subscribe(function() {
alert("BLUR: " + this.selectedValues().length + " elements selected");
});
这是一个工作示例——当用户“tabs”到第二个输入时,模糊事件回调显示选择了多少元素
var ViewModel = function() { this.availableValues = ko.observableArray(["Option A", "Option B", "Option C"]); this.selectedValues = ko.observableArray(); this.onBlur = function() { alert("BLUR: " + this.selectedValues().length + " elements selected"); } }; ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> <select id="select1" multiple="multiple" class="form-control" data-bind="options: availableValues, selectedOptions: selectedValues, multiselect: { includeSelectAllOption: true },event: { blur: $root.onBlur}"> <input type="text">
仅供参考,这是来自开发人员 github 页面的回复
https://github.com/davidstutz/bootstrap-multiselect/issues/1020
基本上是说你应该调用onDropdownHide函数来触发多选插件的一种“模糊”
Bootstrap-select 公开了一些用于挂钩到选择功能的事件developer.snapappointments.com
所以可以参考 hide.bs.select 或 hidden.bs.select。 然后,您可以直接从 event 参数访问选定的值,或者如果您有一个附加到 ie selectedOptions 的 Knockout observableArray; 像这样:
$(document).ready(function () {
$('#select1').on('hide.bs.select', (e) => {
console.log({ obs: self.selectedValues(), event: $(e.currentTarget).selectpicker('val') });
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.