Как организовать работу двух полей, которые отслеживаются при изменении и связанные между собой?

Имеется 2 текстовых поля:
<input id="id_transfer_amount" name="transfer_amount" type="text">
<input id="id_amount_total" name="amount_total" type="text">

Оба поля отслеживаються при изменении и запускают один и тот же метод:
init: function() {
//...
new Form.Element.Observer($("id_transfer_amount"), 0.3, function () {
    this.doOnlineRequest(false);
}.bind(this));

new Form.Element.Observer($("id_amount_total"), 0.3, function () {
    this.doOnlineRequest(false);
}.bind(this));
//...
doOnlineRequest: function() {   
    if (($F("id_transfer_amount")) { // ajax xhr, после которого меняем значение amount_total }
    if (($F("id_amount_total")) { // ajax xhr, после которого меняем значение transfer_amount }
}

Суть проблемы в том, что когда мы вводим значение в transfer_amount, например, 2е поле заполняется, тут же срабатывает обработчик события и выполняет doOnlineRequest второй раз, но для полученного из 1го поля значения, после чего затирает то, что мы вводили в 1м поле..

Как можно решить данную проблему? Пробовал вызывать обработчики при фокусе на поле, различные проверки, результат тот же.
Использую Prototype 1.6.
  • Вопрос задан
  • 2296 просмотров
Пригласить эксперта
Ответы на вопрос 1
@1Michael1
тут в логике проблема
проблема вот в чем:
когда в transfer_amount вводится число - срабатывает Observer для этого поля и "определяется", что значение изменилось. так как оно изменилось - надо вызвать doOnlineRequest. ну ок, вызвали, за одно и поменяли значение amount_total, на котором тоже висит Observer (!) который в свою очередь определяет, что значение изменилось и надо выполнить doOnlineRequest и изменить transfer_amount... ну а дальше по цепочке...
перед запросом надо выключать Observer, а после - включать заново
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы