我有一个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); }
谢谢,
贾斯汀
>升级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.