微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dojo以程序方式更改值时选择onChange事件触发

我有一个dojo(dijit)选择下拉菜单,调用js函数onChange.我期望这只能在用户更改下拉列表中的值时调用onChange函数,但是当我从js代码中编程更改下拉列表的值时,它甚至调用onChange函数.当用户更改下拉列表值时,如何才能调用函数?当我编程更改值时,不应调用函数.
<select jsId="ddlBoundaryType" id="ddlBoundaryType" name="ddlBoundaryType" 
                            dojoType="dijit.form.Select">
                            <option value="0">Circle</option>
                            <option value="1">polygon</option>
                        </select>

dojo.addOnLoad(InitBoundaries);
    function InitBoundaries() {
        dojo.connect(dijit.byId("ddlBoundaryType"),'onChange',Boundaries_ChangeBoundaryType); 
    }

谢谢,
贾斯汀

我认为在这种情况下正确的修复将是 http://bugs.dojotoolkit.org/ticket/10594,因为它直接处理dijit.form.Select.当然,有几种方法解决这个问题.

>升级dojo :).
>继承dijit.form.Select并“修补”_updateSelection函数.
>扩展dijit.form.Select和“补丁”直接在那里.

我会放弃第一个.第二种和第三种方法是相似的,所以我将使用第三种方式发布一个简单的修复,

dijit.form.Select.extend({
   _updateSelection: function() {
        this.value = this._getValueFromOpts();
        var val = this.value;
        if(!dojo.isArray(val)){
            val = [val];
        }
        if(val && val[0]){
            dojo.forEach(this._getChildren(),function(child){
                var isSelected = dojo.some(val,function(v){
                    return child.option && (v === child.option.value);
                });
                dojo.toggleClass(child.domNode,this.baseClass + "SelectedOption",isSelected);
                dijit.setWaiState(child.domNode,"selected",isSelected);
            },this);
        }
   }
});

注意,我没有写这个函数,我很高兴地从源代码剽窃了最后一行,this._handleOnChange(this.value)被删除.

myWidget.attr('value',newValue,false) // should Now work without firing onChange.

原文地址:https://www.jb51.cc/dojo/290865.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐