EasyUI Forum
May 03, 2024, 06:36:13 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: 如何触发 combo 控件的 change 事件?  (Read 25314 times)
iamjxc
Jr. Member
**
Posts: 80


View Profile
« on: April 10, 2014, 10:07:48 PM »

用下面的方案可以, 但是会多触发一次, 有没有更简洁的方案?

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

Logged
stworthy
Administrator
Hero Member
*****
Posts: 3581


View Profile Email
« Reply #1 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');
Logged
iamjxc
Jr. Member
**
Posts: 80


View Profile
« Reply #2 on: April 14, 2014, 12:10:27 AM »

能够工作, 但是我在页面加载时 trigger 会提示下面的错误:

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

感觉目标控件还没有创建完就调用了
Logged
zh_CN
Newbie
*
Posts: 32



View Profile Email
« Reply #3 on: April 14, 2014, 06:41:17 PM »

学习了,继续关注
Logged

From the great China
iamjxc
Jr. Member
**
Posts: 80


View Profile
« Reply #4 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);
       }
   }



Logged
iamjxc
Jr. Member
**
Posts: 80


View Profile
« Reply #5 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

Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!