如何重置dojo CheckedMultiSelect

时间:2014-05-06 01:59:32

标签: javascript dojo

小部件位于表单内,但是

  

form.reset()

不会清除先前选中的CheckedMultiSelect值。

var list = new CheckedMultiSelect({
    dropDown: true,
    labelText: 'States',
    multiple: true,
    name: 'state',
    onChange: getValues,
    required: false
}, "stateSelect");

我在下面尝试过代码,但它不起作用。

  

list.reset()

提前致谢

2 个答案:

答案 0 :(得分:6)

您可以通过CheckedMultiSelect更改list.set('value',[...])的值。当列表不为空时,选择会立即更新...

要清除选择,请致电:

list.set('value',[]);
list._updateSelection();

Dojo 1.9.2。

上进行测试

答案 1 :(得分:3)

这是因为dojox/form/CheckedMultiSelect没有正确实现reset()行为。就像Lukasz提到的那样,它只是在列表不为空时才更新选择。

因此,您可以创建自己的实现:

declare("dojox/form/FixedCheckedMultiSelect", [ CheckedMultiSelect ], {
    reset: function() {
        this.inherited(arguments);
        if (!this._resetValue || !this._resetValue.length) {
            this._updateSelection();
        }
    }
});

这将正确重置您的字段。但请注意,重置多选时,它将重置为默认值。如果您默认使用selected上的<option>属性选择了某些选项,则会重置为这些值。

如果您想确保在重置时始终取消选中所有项,那么您应该在实施中添加一行,以便它变为:

declare("dojox/form/FixedCheckedMultiSelect", [ CheckedMultiSelect ], {
    reset: function() {
        this._resetValue = [];
        this.inherited(arguments);
        if (!this._resetValue || !this._resetValue.length) {
            this._updateSelection();
        }
    }
});

我也做了一个例子JSFiddle