Как сбросить dojo CheckedMultiSelect


Виджет находится внутри формы, однако

Форма.reset ()

Не очищает ранее выбранные значения CheckedMultiSelect.

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

Я пробовал код ниже, но он не работает.

Список.reset ()

Заранее спасибо

2 3

2 ответа:

Вы можете изменить значение CheckedMultiSelect через list.set('value',[...]). Выбор обновляется сразу же, когда список не пуст...

Чтобы очистить выделение, вызовите:

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

Тестируется на Dojo 1.9.2.

Это потому, что dojox/form/CheckedMultiSelect не реализовал поведение reset() должным образом. Как уже упоминал Лукаш, это только обновление выбора, когда список не пуст.

Итак, вы можете, например, создать свою собственную реализацию:

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.