Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.07.2010, 16:20
Аспирант
Отправить личное сообщение для uonax Посмотреть профиль Найти все сообщения от uonax
 
Регистрация: 13.07.2009
Сообщений: 38

Как определить элемент, на котором находится событие onclick (или какое-то другое)
Есть такой html-код:
Код:
<div onclick="show(event)"> some text
<span>текст внутри, при клике на который тоже возникает событие</span>
</div>
В функции show() определяется элемент, на котором был сделан клик

Код:
function show(e)
{
var sourceElem = e.target || e.srcElement;
}
При клике на какой-либо тексте внутри тега <div> (если мы кликаем на текст "some text"),
то в переменную sourceElem заносится ссылка на тег <div>.

Если мы кликаем на текст внутри тега <span>, то в переменную sourceElem заносится ссылка на это тег <span>.
Как сделать, чтобы в переменную sourceElem всегда заносился элемент, на который навешано свойство onclick?

Последний раз редактировалось uonax, 04.07.2010 в 16:22.
Ответить с цитированием
  #2 (permalink)  
Старый 04.07.2010, 16:22
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

<div onclick="show(event, this)">

function show(event, element) {…
Ответить с цитированием
  #3 (permalink)  
Старый 04.07.2010, 18:29
Аспирант
Отправить личное сообщение для uonax Посмотреть профиль Найти все сообщения от uonax
 
Регистрация: 13.07.2009
Сообщений: 38

Сообщение от Octane Посмотреть сообщение
<div onclick="show(event, this)">

function show(event, element) {…
Всё гениально просто.

Кстати. А можно event поставить не на первое место, а, например, на второе?
Ответить с цитированием
  #4 (permalink)  
Старый 04.07.2010, 18:53
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Можно.
Ответить с цитированием
  #5 (permalink)  
Старый 04.07.2010, 18:57
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Конечно можно.

Это если назначать обработчик события следующим образом:
element.onclick = show;

то браузер (кроме IE, в нем нужно использовать window.event) сам первым аргументом в show отправит event, а из атрибута:
onclick="show(event, this)"

браузер создает анонимную функцию, которая уже вызывает show:
element.onclick = function (event) {  show(this, event)  };

Рекомендую прочитать: http://javascript.ru/tutorial/events
Ответить с цитированием
  #6 (permalink)  
Старый 04.07.2010, 19:08
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Octane
element.onclick = function (event) {  show(this, event)  };
Так поступают нормальные браузеры. IE же ничего никакими аргументами в обработчик события не передает. Но тут это играет на руку, т.к. переменная event - глобальная. Вот и получается, что в осле event берется из глобального неймпейса, а в нормальных браузерах - передается аргументом функции.

Если писать
element.onclick = function (event) {  show(this, event)  };
В явном виде, то будут проблемы в IE, т.к. event = undefined.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить нажата какая-либо клавиша или нет? Бобр Общие вопросы Javascript 34 11.11.2016 18:42
определить элемент на котором щелчок warobushek Events/DOM/Window 3 13.06.2010 12:04
Как определить находится ли пользователь в данный момент на сайте? PAMAC Общие вопросы Javascript 19 11.10.2009 15:05
Как определить цвет (темный он или светлый)? mouse_web Элементы интерфейса 6 22.07.2009 14:35
Изменить текст под изображением на котором событие onclick GodRa Общие вопросы Javascript 2 12.11.2008 23:15