проблема с onClick в IE 10
Добрый день
Есть работающая система. У пользователей с автообновлением пришел IE 10 и обнаружился странный баг. Симптомы: при клике на элементах перестали выполнятся все действия. Элементы (a, div) имеют обработчик onClick. С разными функциями внутри. Бряки поставленные внутри функций показывают, что до них поток даже не доходит. Дополнительно усложняющие ситуацию симптомы: У меня на двух разных машинах под IE 10 все продолжает работать. У ряда пользователей - нет. На машине где не работает, если в devtools'ах IE в содержимом атрибута onclick исправить что-нибудь, оно начинает работать. Причем исправить можно что угодно: я пробовал добавить пробел между параметрами в вызове функции, точку с запятой в конце и прочие на мой взгляд не меняющие функционала вещи. Сложилось впечатление, что этим я просто вызываю какую-то переинициализацию внутри браузера и он начинает подхватывать обработчики. Подскажите что делать или хотя бы в какую сторону рыть? гугление ничего похожего не выдало. Проблемы с onClick в IE у народа встречаются, но в совершенно иных ситуациях |
Вот вам и еще одна (правда под сомнением) причина не использовать атрибуты для навески обработчиков )
|
Цитата:
Используйте нормальный способ кодирования, JS отдельно, HTML отдельно. Зачем совать все воедино, это же говнокод. |
Цитата:
Кстати гугл по "НЕ ВЕШАЙ ОБРАБОТЧИКИ ЧЕРЕЗ АТРИБУТЫ" не выдает ничего особо впечатляющего. Первая же ссылка ведет на http://javascript.ru/tutorial/events/intro, где написано, что варианты с document.getElementById('myElement').onclick = function() {} и атрибутом эквивалентны. А учитывая, что в системе весь код генерируется, видимо автору было проще вешать обработчики по месту проживания элемента. И в чем-то я его могу понять. ну и в целом хотелось бы понять, если код валидный, почему он не выполняется, а если нет - почему он выполняется |
Цитата:
|
От ие будет хоть какаето польза , если не буду вешать обработчик через атрибут...
|
Я искренне надеюсь, что не попал на местный флешмоб и еще раз прошу пояснить почему? Гугл по прежнему не в курсе этой фразы.
|
|
molnij, как минимум когда читаешь такой код хочется по лицу дать.
Прочитайте эту статью http://learn.javascript.ru/introduction-browser-events nikita.mmf, и причем тут свойства или в данном топике речь идет о событиях и почему лучше использовать свойство. |
Цитата:
http://ru.wikipedia.org/wiki/JavaScript http://ru.wikipedia.org/wiki/Document_Object_Model И вполне логично не переносить устаревшее морально ? |
Цитата:
Цитата:
Единственное упоминание использования не-атрибута обнаружено в фразе "Используйте свойство, а не атрибут. Так неверно: elem.setAttribute('onclick', func)." |
Цитата:
Цитата:
Цитата:
|
Цитата:
<div onclick="function(){alert('1');}> Код генерируется в виде <div onclick="alert('1')"> |
molnij, дайте ссылку на страницу где не работает.
|
система внутреннего пользования, наружу выхода просто не имеет
|
molnij,ок, тогда кусок кода который не работает.
|
cyber, хорошо, чуть позже, когда доступ на машину будет, скопирую код прямо из IE
|
Код элемента в окне отладки IE
<a class="btn btn-small btn btn-success" onclick="CreateKPIValues()" href="#"> В разделе "Динамические сценарии" function CreateKPIValues() { var fields = { ProjectId: Asyst.Workspace.currentForm.Data.ProjectId }; Asyst.Workspace.openEntityDialog("KPIValues", "Новый KPI проекта. Значения", null, function () { Asyst.Workspace.currentForm.Reset(); }, fields); } Если нажимать на <a> - ничего не будет происходить. Встаю в окне отладки IE на обработчик onclick и добавляю пробел между скобками вызова функции: <a class="btn btn-small btn btn-success" onclick="CreateKPIValues( )" href="#"> Все начинает работать. Причем, повторюсь, всё нормально в IE9, chrome, ff, и части IE10. И лишь на паре компов происходит эта ерунда. |
molnij, хм, довольно странно,
<зануда> после вызова функции нужно ставить точку с запятой <зануда/> Цитата:
Вам нужно найти ошибку, используйте консоль , тогда я смогу хоть что то сделать. Цитата:
|
Цитата:
Цитата:
Было onclick="CreateKPIValues()" стало onclick="CreateKPIValues( )". Внутри скобок в вызове функции добавился пробел. Все заработало. Кстати, пробовал добавлять точку-с-запятой после функции - тоже начинало работать. Цитата:
Правда у меня уже подозрения, что это какая-то косячная версия IE попалась, что задачу, впрочем, не облегчает.. |
А что находится в свойстве el.onclick во время тупняка?
И вобще, я всегда говорю что имена функций должны быть с маленькой буквы, а конструкторов - с большой. Вот в этом наверно и проблема! |
Часовой пояс GMT +3, время: 23:56. |