05.04.2013, 14:26
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
Сообщение от cyber
|
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)."
|
|
05.04.2013, 14:30
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от molnij
|
Единственное упоминание использования не-атрибута обнаружено в фразе
"Используйте свойство, а не атрибут. Так неверно: elem.setAttribute('onclick', func)."
|
ниже не зря было написано
Цитата:
|
Как вы думаете, почему?
Раскрыть ответ
|
Цитата:
|
Значением атрибута может быть только строка. Любое другое значение преобразуется в строку.
Функция в строчном виде обычно даёт свой код: "function() { alert(1) }".
Итак, атрибут присвоен. Теперь браузер создаст обработчик с телом из этой строки:
document.body.onclick = function() {
function() { alert(1) }
}
Этот код попросту некорректен с точки зрения JavaScript. Локальная функция объявлена без имени — отсюда и ошибка.
|
П.с в общем видно как внимательно вы читали...
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.04.2013, 14:38
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
Сообщение от cyber
|
ниже не зря было написано
...
П.с в общем видно как внимательно вы читали...
|
Так я ведь не объявляю функцию для обработчика, т.е. не пишу
<div onclick="function(){alert('1');}>
Код генерируется в виде <div onclick="alert('1')">
|
|
05.04.2013, 14:39
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
molnij, дайте ссылку на страницу где не работает.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.04.2013, 14:49
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
система внутреннего пользования, наружу выхода просто не имеет
|
|
05.04.2013, 14:50
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
molnij,ок, тогда кусок кода который не работает.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.04.2013, 14:53
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
cyber, хорошо, чуть позже, когда доступ на машину будет, скопирую код прямо из IE
|
|
05.04.2013, 19:30
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
Код элемента в окне отладки 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. И лишь на паре компов происходит эта ерунда.
|
|
05.04.2013, 21:10
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
molnij, хм, довольно странно,
<зануда>
после вызова функции нужно ставить точку с запятой
<зануда/>
Сообщение от molnij
|
Встаю в окне отладки IE на обработчик onclick и добавляю пробел между скобками вызова функции:
|
wtf?
Вам нужно найти ошибку, используйте консоль , тогда я смогу хоть что то сделать.
Сообщение от molnij
|
Если нажимать на <a> - ничего не будет происходить.
|
так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.04.2013, 21:34
|
Новичок на форуме
|
|
Регистрация: 04.04.2013
Сообщений: 9
|
|
Сообщение от cyber
|
molnij, хм, довольно странно,
<зануда>
после вызова функции нужно ставить точку с запятой
<зануда/>
|
Справедливо.
Сообщение от cyber
|
wtf?
|
Дык это самое важное. Я писал в первом сообщении - если я хоть как-то меняю содержимое onclick в developer tools IE на закладке HTML(т.е. не перегружая страницу, просто налету), то все начинает работать.
Было onclick="CreateKPIValues()" стало onclick="CreateKPIValues( )". Внутри скобок в вызове функции добавился пробел. Все заработало. Кстати, пробовал добавлять точку-с-запятой после функции - тоже начинало работать.
Сообщение от cyber
|
так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..
|
До скрипта дело просто не доходит. Брекпоинт поставленный на скрипт не активируется. Пока не исправишь что-нибудь, как уже написал выше, после этого и брекпоинт активируется и код нормально выполняется.
Правда у меня уже подозрения, что это какая-то косячная версия IE попалась, что задачу, впрочем, не облегчает..
|
|
|
|