У меня есть поле ввода, которое принимает число, которое проверяется в функции opConfig.reloadPrice ().Я установил 2 наблюдателя на один и тот же элемент, при «изменении» он выполняет код, когда я щелкаю вне поля или использую вкладку - если изменение было сделано.При нажатии клавиши он проверяет, была ли нажата клавиша возврата, затем выполняет код И и также вызывает наблюдателя изменения!Так что в этом случае функция opConfig.reloadPrice () выполняется дважды (и я получаю два одинаковых окна с предупреждениями).Код, который у меня сейчас есть:
<input type="text" value="" name="options[1]" id="options_1" onkeypress="return disableEnterKey(event)">
Event.observe($('options_1'), 'change', function(e){
opConfig.reloadPrice();
});
Event.observe($('options_1'),'keypress', function(e){
if (e.keyCode == Event.KEY_RETURN)
opConfig.reloadPrice();
});
Я пробовал несколько разных решений (я пробовал 'размытие' события, помещая одного наблюдателя в другого ...)
Я ищуза решение, похожее на это jQuery-Два события одновременно
Спасибо за миллион
РЕДАКТИРОВАНИЕ:
Спасибоto katspaugh Я решил это.Было несколько вещей, которые мне не были понятны, одна из них: событие 'нажатия клавиши' наблюдается до события "изменения", поэтому вы можете устанавливать переменные в одном наблюдателе и проверять их позже в другом(именно поэтому мне потребовалось некоторое время, чтобы понять код katspaughs :-)).
В любом случае, я немного изменяю код, который мне подходит:
var enterPressed = 0;
Event.observe($('options_1'), 'change', function(){
if (enterPressed !== 1) {
opConfig.reloadPrice();
}
enterPressed = 0;
});
Event.observe($('options_1'), 'keypress', function(e){
if ((e.keyCode == Event.KEY_RETURN) || (e.keyCode == Event.KEY_TAB)) {
enterPressed = 1;
opConfig.reloadPrice();
}
else
enterPressed = 0;
});
Приветствия,
джазкат