再说combobox——onLoadSuccess用法实例

不知道大家有没有发现,在easyUI的combobox实现级联这篇文章里

在对combobox设置的时候,我写了一个onLoadSuccess函数。

这个函数是在加载完远程数据成功后被触发,大致可以分为下面几种情况:

1、若不在onBeforeLoad中限制,无论用何种方式初始化时必触发一次,因为初始化时onBeforeLoad无论如何也都会触发一次

2、若不在onBeforeLoad中限制,在使用remote方式加载数据时,每次发起请求到成功接收到数据后都会触发一次


我之前写的onLoadSuccess函数是为了在进入修改表单的页面时,当主combobox加载数据并翻译完毕后,触发onLoadSuccess从而来加载并翻译级联combobox中的值。

因为级联的combobox完全是被动的,当新建的时候我们是在onSelect这个函数中触发的,而修改进来就需要依靠onLoadSuccess了。

下面看一下我之前的写法:

     	onLoadSuccess:function(){
     		var value = $(this).combobox('getValue');
     		if(value != ''){
    		<span style="white-space:pre">	</span>$('[comboname=city]').combobox('reload', 'test/getCityListByProvince?id=' + $(this).combobox('getValue'));
    		}
     	}

这里先判断了主combobox中是否有值,若有值就去加载级联combobox中的数据去翻译。


有什么问题吗?


这对于editable:false的下拉选择框来说好像没什么问题,因为value肯定只能是对应的value,而不会是其他乱七八糟的东西

但是如果像前一篇文章一样是实现了combobox的自动提示功能的那似乎就有些问题了。


比如我们在输入关键字时,每输一个关键字,都会触发onLoadSuccess,且此时value也有值,且就是你输入的那个值(但是这里个人感觉combobox的设计有点问题,因为输入的值应该作为text才对,没有select之前,value都应该为空才对)

这样一来,就会多出很多错误的请求,因为级联的那个请求只需要在onSelect的时候触发才对。


那么如何改进呢?增加一个判断条件吧


方案1:if($(this).combobox('getValue') == $(this).combobox('getText')){return}

看似可行,但实际上发现输入速度过快时,两者的值会不一样!原因也没有深究,放弃之

方案2:由于我这里用到的value都是数字,所以可以用正则表达式判断  

if(/^\d+$/.test(value)),这种方案暂时是可行的,但是也不完美,当用户输入数字时也会去触发关键字搜索,所以也得不到什么结果。

方案3:可以利用onBeforeLoad来判断

    onBeforeLoad: function(param){  
        if(param == null || param.q == null || param.q.replace(/ /g, '') == ''){  
            var value = $(this).combobox('getValue');  
            if(value){// 这里可以判断为修改,在这去加载级联combobox中的数据
                param.id = value;  
                return true;  
            }  
            return false;  
        }  
    } 
方案2和方案3用哪种其实都可以达到目的~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值