EasyUI Forum

General Category => EasyUI for jQuery => Topic started by: iamjxc on April 10, 2014, 10:07:48 PM



Title: 如何触发 combo 控件的 change 事件?
Post by: iamjxc on April 10, 2014, 10:07:48 PM
用下面的方案可以, 但是会多触发一次, 有没有更简洁的方案?

var value = el.combo("getValue");
el.combo("setValue", "");
el.combo("setValue", value);



Title: Re: 如何触发 combo 控件的 change 事件?
Post by: stworthy on April 11, 2014, 01:06:46 AM
You can extend a new method to trigger the 'onChange' event.
Code:
$.extend($.fn.combo.methods, {
triggerChange: function(jq){
return jq.each(function(){
var c = $(this);
var opts = c.combo('options');
var v = opts.multiple ? c.combo('getValues') : c.combo('getValue');
opts.onChange.call(this, v, v);
})
}
})

Calling the 'triggerChange' method will fire the 'onChange' event.
Code:
$('#cc').combo('triggerChange');


Title: Re: 如何触发 combo 控件的 change 事件?
Post by: iamjxc on April 14, 2014, 12:10:27 AM
能够工作, 但是我在页面加载时 trigger 会提示下面的错误:

TypeError: $.data(...) is undefined 
return $.data(jq[0],"combo").options;
jquery....min.js (第 11349 行)

感觉目标控件还没有创建完就调用了


Title: Re: 如何触发 combo 控件的 change 事件?
Post by: zh_CN on April 14, 2014, 06:41:17 PM
学习了,继续关注


Title: Re: 如何触发 combo 控件的 change 事件?
Post by: iamjxc on April 15, 2014, 06:49:28 PM
用下面的方案解决异常的问题了

               $.extend($.fn.combo.methods, {
         triggerChange: function(jq){
            return jq.each(function(){
               var el = $(this);
               callChange(this, el);
            });
         }
      });


        // trigger 时, 控件可能还没有初始化完, 所以通过异常来实现重试
   // TODO: 更好的方案
   function callChange(oThis, el){
       try{         
          var opts = el.combo('options');
          var v = opts.multiple ? el.combo('getValues') : el.combo('getValue');
          opts.onChange.call(oThis, v, v);
       }catch(e){
          setTimeout(function(){
             callChange(oThis, el);
          }, 100);
       }
   }





Title: Re: 如何触发 combo 控件的 change 事件?
Post by: iamjxc on April 25, 2014, 05:01:07 PM
现在换了一个思路, 把 change 事件绑定在原控件上, 而不是 combo 的 onChange 事件上
$("#cc").bind("change", function(e){
     ....
});

在 combo 的 onChange 里:
$(this).trigger("change");

就是拼音检索 filter 的时候, onChange 调用的太频繁了, 而且是无意义的调用
所以我在 onChange 里又过滤掉多余的调用

如果能够覆写 setValues 方法, 把 trigger 放在这里也挺合适的,
并且在 remainText = true 时, 不 trigger