Использование Dojo для повторного включения кнопки отправки при редактировании формы

Я пытаюсь создать веб-приложение с помощью Dojo. У меня есть форма, которая отправляет данные через возможности Dojo xhrPost в программу на стороне сервера, которая сохраняет изменения, внесенные в форму, всякий раз, когда пользователь нажимает кнопку «Сохранить». Что я хотел бы сделать, так это отключить кнопку сохранения после успешного сохранения до тех пор, пока в следующий раз что-то не изменится в любом из полей формы, чтобы избежать повторных попыток сохранить неизмененный документ.

Я пытался заставить функцию наблюдения за событиями Dojo следить за изменениями, но безуспешно. Событие, предназначенное для повторного включения кнопки сохранения, никогда ничего не делает. Вот что я пробовал:

eventWatching.push(dojo.connect(dijit.byId('editForm'), 'onChange', function() { dijit.byId('saveButton').set('disabled', false); }));

Использование onKeyPress вместо onChange казалось многообещающим, но это (очевидно) не активировало кнопку, когда форма редактировалась только с помощью мыши.


person Timothy R. Butler    schedule 12.03.2011    source источник


Ответы (2)


До версии 1.6 я не думаю, что dijit.form.Form связывает свои дочерние onChange со своими собственными, поэтому, вероятно, ваша идея onChange не сработала.

В Dojo 1.6 то, о чем вы просите, легко возможно благодаря тому, что виджеты теперь наследуют dojo.Stateful функциональные возможности:

form.watch('value', function(property, oldvalue, newvalue) {
    /* ... */
});

В версии 1.5 или ниже это может потребовать некоторой работы; не могу придумать легкий путь из головы, но, может быть, у кого-то еще есть идея, или кто-то ударит меня позже.

Вы можете найти код, отвечающий за подключение функций onChange и отслеживания значений в версии 1.6, здесь: https://github.com/dojo/dijit/blob/master/form/_FormMixin.js#L396-429

person Ken Franqueiro    schedule 14.03.2011
comment
Спасибо, Кен! Это прекрасно — и я думаю, что у меня было правильное время, чтобы захотеть сделать это с выпуском 1.6 на этой неделе! - person Timothy R. Butler; 18.03.2011

Если новое значение пустая строка, форма действительна.

frm1.watch('state',function(property, oldvalue, newvalue) {
 console.log(newvalue)
})
person Rajkamal Subramanian    schedule 27.05.2011