Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 16:08   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание Обработчик событий OnClick (JS)

Здравствуйте

Такая вот проблема:
Есть div у него есть чилды тоже div-ы, делаю этому div-у обработчик "onclick" - но он почему-то отрабатывает и на чилдах.

Подскажите как это исправить, и почему это происходит???

Пример:
Код:
  var bloc = document.createElement('div');
  bloc.id = 'overlay';
  bloc.className = 'overlay';
  bloc.onclick = function close() {document.body.removeChild(bloc);};
  bloc.innerHTML = '';
  document.body.appendChild(bloc);
  
  var m_window = document.createElement('div');
  m_window.id = 'm_window';
  m_window.className = 'window';
  m_window.innerHTML = 'Я модальное окно!';
  bloc.appendChild(m_window);
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 17.12.2012, 17:22   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

http://javascript.ru/tutorial/events...rigger:-target
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 17.12.2012, 18:06   #3
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Сообщение

Цитата:
Сообщение от MyLastHit Посмотреть сообщение
А еще варианты есть? Например по ID - div-а.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 18.12.2012, 01:16   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Не знаю, не встречал. Кинул этот вариант, он все-таки предпочтительнее, на нем базируется делегирование событий.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 18.12.2012, 08:38   #5
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Подскажите как это исправить, и почему это происходит???
1. На каждый дочерний элемент навесить свой обработчик события клик с прекращением иерархии вызова (return false).
2. Это не ошибка. Любое событие выполняется для объекта и для каждого родительского элемента вплоть до document.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 15.02.2013, 07:01   #6
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Вопрос

А вот еще проблем
Столкнулся в FireFox с srcElement.

Пробовал таким методом исправить все:
Код:
var target = elems && elems.target || event.srcElement;
Ничего не получилось.

Подскажите пожалуйста как получать srcElement или точнее event в FireFox а еще луче кросс браузерно
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 15.02.2013, 20:01   #7
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Сложно...
К сожалению, максимум что могу порекомендовать, это jQuery, он кросс-браузерно передает всю инфу о событии.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 15.02.2013, 20:24   #8
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Вот мне кажется ИМХО лучше подписываться на события атрибутами, а в JS только контроллеры. AngularJS пошел по этому пути и я им доволен. Нет этих тон ненужного кода.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 16.02.2013, 05:47   #9
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Радость

Вроде как нашел способ обойти это дело

Код функции:
Код:
function test(event) {
  var event = event || window.event;
  
  window.alert(event.target.className);
}
И вызов ее:
Код HTML:
onclick="test(event);"
Работает в Mozilla Firefox, Opera, Google Chrome. В IE не тестил. (Если кто вдруг будет тестить в IE сообщите результат).
В дебаге нашел общую черту этих браузеров "target.className".
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать для WebBrowser обработчик onClick demiancz Общие вопросы Delphi 0 21.09.2012 11:38
Обработчик событий kostolomeo Помощь студентам 1 22.05.2012 07:49
Обработка событий OnClick для массива TImage yachsmit Общие вопросы Delphi 3 14.01.2012 08:32
Обработчик OnClick у массива кнопок MyLastHit Общие вопросы Delphi 15 18.05.2011 11:33
обработчик событий ben95 Помощь студентам 5 28.01.2008 17:46