Вопрос

Прототип событий, который я использую для изменений в избранных меню, не запускается в 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;
}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top