Event.Observe 'изменение' события не запускаются в IE
-
23-09-2019 - |
Вопрос
Прототип событий, который я использую для изменений в избранных меню, не запускается в IE.
Event.observe('use_billing', 'change', Checkout.getBillingData);
Это прекрасно работает в Firefox (конечно), но ничего не происходит в IE (конечно) - я некоторое время гуглил это, но я не нашел подходящего решения этой проблемы. Я читал, что есть проблемы, но я не нашел ничего полезного, чтобы обойти проблему и заставить это работать.
Я действительно пытаюсь избежать использования встроенных триггеров событий, потому что они навязчивы и создают грязный документ, склонный к ошибкам:
<select id='use_billing' onchange="Checkout.getBillingData();">....</select>
Любые идеи были бы великолепны - это единственное, что мешает этому проекту переходить от бета -версии к производству.
Решение 2
Я нашел причину - это была не проблема фокуса, выясняется, что у меня было имя и идентификаторы элемента формы одинаково - я изменил значение идентификатора, и все работало нормально.
Другие советы
Это общая проблема с IE. Это не стреляет change
События, пока элемент не потеряет фокус.
Чтобы убедиться, что это действительно причина вашей проблемы, попробуйте изменить меню, а затем нажать вкладку, чтобы переместить фокус на другой элемент. Если ваш обратный вызов правильно стреляет, вы узнаете, что нет никакой другой проблемы.
Я работал над этой проблемой раньше, также прослушивая другие события, такие как click
или же keydown
. Анкет Вы можете добавить чек к своему обратному обращению, чтобы убедиться, что значение фактически отличается от того, чтобы убедиться, что вы не обрабатываете событие больше раз, чем необходимо (поскольку другие браузеры уволят оба click
а также change
В то же время, если они нажимают на новое значение).
Я знаю, что это старая тема, но я хотел поделиться альтернативным ответом на указанный выше. В моем коде имя и идентификатор элемента были одинаковыми, но это не имело значения.
В функции, которая уволена, аргумент события передавался из прототипа. Чтобы получить значение текстового поля (которое подняло событие) в Firefox, который вы используете eventArg.currentTarget.value
Но в т.е. вы должны использовать eventArg.srcElement.value
Итак, чтобы он работал в обоих браузерах, вы должны использовать ...
var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}