У меня есть форма с 2 текстовыми вводами и 2 контролами диапазона.Обычно, когда текстовое поле A изменяется, вызывается событие для изменения диапазона A, а когда текстовое поле B изменяется, событие запускается для изменения диапазона B.
Однако в одном конкретном случае я хотел бы изменить либотекстовое поле A или текстовое поле B для обновления обоих диапазонов A и B. В этом случае я попытался связать события с соответствующими элементами управления, но это не сработало, потому что в коде построения событий настроено много состояний (неупомяните, что каждое событие вызывает 'this', что заставило бы логику использовать неправильный элемент управления, если бы он был запущен не так, как предполагалось).
Чтобы упростить задачу, было бы лучше передать строку(представляющий другой идентификатор ввода текста) обработчику событий во время его создания, а затем вызов события change () вручную для второго элемента управления.Однако это помещает вещи в бесконечный цикл рекурсии.Я думал о способе обойти рекурсию, но она требует глобальной переменной.
Есть ли лучший способ, чем этот, предпочтительно тот, который не требует глобальной переменной?
ml_inEvent = false;
$ctlToVal.bind('keyup change', {feedbackCtl: ml_feedback, controlsToMonitor: ary, validationGroup: this.validationGroup, controlToFire: ctlToFire}, function(event) {
// Other processing happens here...
if (event.data.controlToFire != '') {
var $controlToFire = $('#' + event.data.controlToFire);
if ($controlToFire.length) {
// Use a global variable to ensure this event is not fired again
// as a result of calling the other one
if (!ml_inEvent) {
ml_inEvent = true;
$controlToFire.change();
ml_inEvent = false;
}
}
}
});