Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   проблема с onClick в IE 10 (https://javascript.ru/forum/events/37029-problema-s-onclick-v-ie-10-a.html)

molnij 05.04.2013 14:26

Цитата:

Сообщение от cyber (Сообщение 244391)
molnij, как минимум когда читаешь такой код хочется по лицу дать.
Прочитайте эту статью http://learn.javascript.ru/introduction-browser-events
nikita.mmf, и причем тут свойства или в данном топике речь идет о событиях и почему лучше использовать свойство.

Читал статью. Узнал оттуда:
Цитата:

Эти два примера кода работают одинаково:
Только HTML: <input type="button" onclick="alert('Клик!')" value="Кнопка"/>
HTML + JS: document.getElementById('button').onclick = function() {alert('Клик!'); }
Вопрос остался. Почему не работает и откуда так много заглавных букв в "НЕ ВЕШАЙ ОБРАБОТЧИКИ ЧЕРЕЗ АТРИБУТЫ!!!"

Единственное упоминание использования не-атрибута обнаружено в фразе
"Используйте свойство, а не атрибут. Так неверно: elem.setAttribute('onclick', func)."

cyber 05.04.2013 14:30

Цитата:

Сообщение от molnij
Единственное упоминание использования не-атрибута обнаружено в фразе
"Используйте свойство, а не атрибут. Так неверно: elem.setAttribute('onclick', func)."

ниже не зря было написано
Цитата:

Как вы думаете, почему?
Раскрыть ответ
Цитата:

Значением атрибута может быть только строка. Любое другое значение преобразуется в строку.

Функция в строчном виде обычно даёт свой код: "function() { alert(1) }".

Итак, атрибут присвоен. Теперь браузер создаст обработчик с телом из этой строки:
document.body.onclick = function() { 
  function() { alert(1) }
}


Этот код попросту некорректен с точки зрения JavaScript. Локальная функция объявлена без имени — отсюда и ошибка.
П.с в общем видно как внимательно вы читали...

molnij 05.04.2013 14:38

Цитата:

Сообщение от cyber (Сообщение 244396)
ниже не зря было написано
...
П.с в общем видно как внимательно вы читали...

Так я ведь не объявляю функцию для обработчика, т.е. не пишу
<div onclick="function(){alert('1');}>
Код генерируется в виде <div onclick="alert('1')">

cyber 05.04.2013 14:39

molnij, дайте ссылку на страницу где не работает.

molnij 05.04.2013 14:49

система внутреннего пользования, наружу выхода просто не имеет

cyber 05.04.2013 14:50

molnij,ок, тогда кусок кода который не работает.

molnij 05.04.2013 14:53

cyber, хорошо, чуть позже, когда доступ на машину будет, скопирую код прямо из IE

molnij 05.04.2013 19:30

Код элемента в окне отладки 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. И лишь на паре компов происходит эта ерунда.

cyber 05.04.2013 21:10

molnij, хм, довольно странно,
<зануда>
после вызова функции нужно ставить точку с запятой
<зануда/>
Цитата:

Сообщение от molnij
Встаю в окне отладки IE на обработчик onclick и добавляю пробел между скобками вызова функции:

wtf?
Вам нужно найти ошибку, используйте консоль , тогда я смогу хоть что то сделать.
Цитата:

Сообщение от molnij
Если нажимать на <a> - ничего не будет происходить.

так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..

molnij 05.04.2013 21:34

Цитата:

Сообщение от cyber (Сообщение 244460)
molnij, хм, довольно странно,
<зануда>
после вызова функции нужно ставить точку с запятой
<зануда/>

Справедливо.

Цитата:

Сообщение от cyber (Сообщение 244460)
wtf?

Дык это самое важное. Я писал в первом сообщении - если я хоть как-то меняю содержимое onclick в developer tools IE на закладке HTML(т.е. не перегружая страницу, просто налету), то все начинает работать.
Было onclick="CreateKPIValues()" стало onclick="CreateKPIValues( )". Внутри скобок в вызове функции добавился пробел. Все заработало. Кстати, пробовал добавлять точку-с-запятой после функции - тоже начинало работать.

Цитата:

Сообщение от cyber (Сообщение 244460)
так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..

До скрипта дело просто не доходит. Брекпоинт поставленный на скрипт не активируется. Пока не исправишь что-нибудь, как уже написал выше, после этого и брекпоинт активируется и код нормально выполняется.

Правда у меня уже подозрения, что это какая-то косячная версия IE попалась, что задачу, впрочем, не облегчает..


Часовой пояс GMT +3, время: 23:10.