Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.04.2013, 14:26
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 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)."
Ответить с цитированием
  #12 (permalink)  
Старый 05.04.2013, 14:30
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

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

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

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


Этот код попросту некорректен с точки зрения JavaScript. Локальная функция объявлена без имени — отсюда и ошибка.
П.с в общем видно как внимательно вы читали...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #13 (permalink)  
Старый 05.04.2013, 14:38
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 04.04.2013
Сообщений: 9

Сообщение от cyber Посмотреть сообщение
ниже не зря было написано
...
П.с в общем видно как внимательно вы читали...
Так я ведь не объявляю функцию для обработчика, т.е. не пишу
<div onclick="function(){alert('1');}>
Код генерируется в виде <div onclick="alert('1')">
Ответить с цитированием
  #14 (permalink)  
Старый 05.04.2013, 14:39
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

molnij, дайте ссылку на страницу где не работает.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #15 (permalink)  
Старый 05.04.2013, 14:49
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 04.04.2013
Сообщений: 9

система внутреннего пользования, наружу выхода просто не имеет
Ответить с цитированием
  #16 (permalink)  
Старый 05.04.2013, 14:50
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

molnij,ок, тогда кусок кода который не работает.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #17 (permalink)  
Старый 05.04.2013, 14:53
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 04.04.2013
Сообщений: 9

cyber, хорошо, чуть позже, когда доступ на машину будет, скопирую код прямо из IE
Ответить с цитированием
  #18 (permalink)  
Старый 05.04.2013, 19:30
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 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. И лишь на паре компов происходит эта ерунда.
Ответить с цитированием
  #19 (permalink)  
Старый 05.04.2013, 21:10
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

molnij, хм, довольно странно,
<зануда>
после вызова функции нужно ставить точку с запятой
<зануда/>
Сообщение от molnij
Встаю в окне отладки IE на обработчик onclick и добавляю пробел между скобками вызова функции:
wtf?
Вам нужно найти ошибку, используйте консоль , тогда я смогу хоть что то сделать.
Сообщение от molnij
Если нажимать на <a> - ничего не будет происходить.
так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #20 (permalink)  
Старый 05.04.2013, 21:34
Новичок на форуме
Отправить личное сообщение для molnij Посмотреть профиль Найти все сообщения от molnij
 
Регистрация: 04.04.2013
Сообщений: 9

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

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

Сообщение от cyber Посмотреть сообщение
так как href = "#" по ссылке не перейдет, а если нечего не происходит значить где то в скрипте возникло исключение..
До скрипта дело просто не доходит. Брекпоинт поставленный на скрипт не активируется. Пока не исправишь что-нибудь, как уже написал выше, после этого и брекпоинт активируется и код нормально выполняется.

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с onclick Bubble Общие вопросы Javascript 2 25.08.2012 15:51
Проблема с onclick sitebuilder Общие вопросы Javascript 3 18.06.2012 11:31
Проблема с обработкой OnClick suslik90 Events/DOM/Window 1 11.05.2012 21:09
Проблема с onclick Teledrug Events/DOM/Window 2 19.05.2010 07:52
Проблема с onclick Reflexion Events/DOM/Window 9 25.10.2009 22:54