本文针对layui下拉框监听不到值变化的问题,分析了官方form.on('select')方法在值未改变时仍触发事件的特性。通过引入隐藏input框并手动触发change事件,实现了仅在实际值发生变化时才执行逻辑的需求,提供了具体的代码实现思路。
layui下拉框监听机制分析
关于layui监听下拉框值的变化,官方文档提供了一套标准方法。
form.on('select(demo)',function(data){
console.log(data.value)//打印当前select选中的值
})
按照常规理解,监听下拉框值的变化应当仅在值发生实际改变时触发事件。然而,官方提供的该方法存在一个特性:只要用户点击了下拉选项中的任何值,无论新选中的值是否与当前值相同,该事件都会被触发。
解决思路与实现
针对上述行为,下面介绍一种解决思路。
首先,创建一个input元素用于存储select当前选中的value值。有人可能会想到直接监听这个input框的值变化,但这种方法不可行,因为动态赋值操作无法自动触发input的change事件。
接下来展示具体的代码实现,以便理解其逻辑。
//input值发生变化事件
$(input).on('change',function(){
console.log('layui下拉框的值发生了变化');
})
form.on('select(demo)',function(data){
//判断当前选中的值是否跟input的值相等,相等的话,就不发生change事件,需要注意的是要先判断再赋值
var inputVal = $(input).val();
if(data.value !== inputVal ){
$(input).change();
}
$(input).val(data.value)
})
以上即为解决layui下拉框监听不到值变化的全部内容,希望能对大家有所帮助。