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, { 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 |