Event.observe 'изменяют' события, не инициированные в IE

Слушатель события Prototype, которого я использую для изменений в избранных меню, не инициирован в IE.

Event.observe('use_billing', 'change', Checkout.getBillingData);

Это хорошо работает в Firefox (конечно), но ничего не происходит в IE (конечно) - я гуглил это в течение некоторого времени, но я не нашел подходящее решение этой проблемы. Я читал существуют проблемы, но я ничто не нашел полезным, чтобы обойти проблему и заставить это работать.

Я действительно стараюсь не использовать встроенные триггеры события, потому что они являются навязчивыми и делают для грязного документа подверженный ошибкам:

<select id='use_billing' onchange="Checkout.getBillingData();">....</select>

Любые идеи были бы прекрасными - это - единственная вещь, мешающая этому проекту идти от беты до производства.

5
задан Rob W 29 December 2011 в 12:23
поделиться

2 ответа

Я нашел причину - это была не проблема с фокусом, оказалось, что у меня были одинаковые значения имени и идентификатора элемента формы - я изменил значение идентификатора, и все работало нормально.

2
ответ дан 14 December 2019 в 08:48
поделиться

Это обычная проблема IE. Он не запускает события change , пока элемент не потеряет фокус.

Чтобы убедиться, что это действительно причина вашей проблемы, попробуйте изменить меню, а затем нажмите вкладку, чтобы переместить фокус на другой элемент. Если ваш обратный вызов сработает правильно, вы узнаете, что другой проблемы нет.

Раньше я обходил эту проблему, прислушиваясь к другим событиям, таким как щелчок или нажатие клавиши . Вы можете добавить проверку к своему обратному вызову, чтобы убедиться, что значение действительно отличается от предыдущего, чтобы гарантировать, что вы не обрабатываете событие больше раз, чем необходимо (поскольку другие браузеры будут запускать как щелчок , так и измените одновременно, если они нажмут на новое значение).

3
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: