Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как узнать куда кликнули при blur (https://javascript.ru/forum/events/30757-kak-uznat-kuda-kliknuli-pri-blur.html)

kolyan1983 14.08.2012 17:17

Как узнать куда кликнули при blur
 
Есть элемент (<input type="text" />). К нему привязано событие onblur. Кто нибудь знает как кроссбраузерно получить данные об элементе по которому кликнули в обработчике этого события onblur ?

Dim@ 14.08.2012 17:25

kolyan1983,
легко
<script type="text/javascript">
document.i = 0;
function blu(e){
 if (document.i != 5){return;}
 var e = e || window.event;
 var target = e.target || e.srcElement;
 alert(target);
}
document.onclick = blu;
</script>
<div>Щелкни по мне</div>
<input type="text" onblur="document.i = 5;" onfocus="document.i = 0;">

Aetae 14.08.2012 17:37

<div>Щелкни по мне</div>
<input type="text" onblur="alert(event.explicitOriginalTarget || event.toElement)">

Первое ff, второе ie.
Хз, как в других браузерах, лень смотреть.)

Dim@ 14.08.2012 17:41

Aetae,
у меня при клике на див - [object HTMLDivElement]
у тебя [object Text], а вообще интересно какими браузерами поддерживается?

Aetae 14.08.2012 17:49

Цитата:

Сообщение от Dim@ (Сообщение 197548)
Aetae,
у меня при клике на див - [object HTMLDivElement]
у тебя [object Text],

[object Text] - точнее.:p

Вообще в любом случае твой вариант лучше ибо универсальнее.)
Цитата:

Сообщение от Dim@ (Сообщение 197548)
а вообще интересно какими браузерами поддерживается?

Только ради тебя проверил в хроме - не работает.)

Dim@ 14.08.2012 17:58

Aetae,
Цитата:

Сообщение от Aetae
[object Text] - точнее.:p

:lol:
Цитата:

Сообщение от Aetae
Вообще в любом случае твой вариант лучше ибо универсальнее.)

:lol:
Цитата:

Сообщение от Aetae
Только ради тебя проверил в хроме - не работает.)

ну блин через месяц - два будет поддерживать гораздо свыше того что сейчас так что это не проблема :)

kolyan1983 14.08.2012 18:10

В контексте моей задачи не тот ни другой вариант не работает/не подходит. Хотелось бы узнать возможно ли в принципе как то так для всех браузеров:

$('#element').blur(function(event){

var clickedElementClass = ...

});

Dim@ 14.08.2012 18:21

kolyan1983,
вы что тупой? - простите не могу сдерживаться когда хрень говорят :)
мой вариант и вариант Aetae
вполне подходят :)
<script type="text/javascript">
function your_function(target){//ваша функция принимающая элемент
  alert(target.getAttribute("id"));
}
document.i = 0;
function blu(e){
 if (document.i != 5){return;}
 var e = e || window.event;
 var target = e.target || e.srcElement;
 your_function(target);//вызывайте свою функцию с тем элементом (который вам нужен)
//и там получайте его свойства
}
document.onclick = blu;
</script>
<div id="Это ид дива по которому ты щелкнул">Щелкни по мне что бы вызвалась твоя функция которая алертит мой ид</div>
<input type="text" onblur="document.i = 5;" onfocus="document.i = 0;">

ваш вариант сделать нельзя ибо с блур-а вы сможете получить только тот же элемент на котором блур произошел
возможно в будущем такое будет можно так сделать :)

Dim@ 14.08.2012 18:23

kolyan1983,
и так можно получить все свойства ;)

kolyan1983 14.08.2012 18:24

Не говорят хрень, а спрашивают. Спрашивают потому что тупо не знают. Оба варианта не подходят потому что придётся переписывать кучу стороннего кода jquery плагинов.

Dim@ 14.08.2012 18:28

Цитата:

Сообщение от kolyan1983
В контексте моей задачи не тот ни другой вариант не работает/не подходит.

Подходит - говорят хрень - простите конечно беру слова обратно
Цитата:

Сообщение от kolyan1983
Оба варианта не подходят потому что придётся переписывать кучу стороннего кода jquery плагинов.

:blink: :blink:
здесь при чем тут плагины - вы хотите получить свойства элемента - их можно получить в новой функции где передается target пример выше это наглядно показал ;)
P.S. вы же читали код примера?

kolyan1983 14.08.2012 18:28

"и так можно получить все свойства " - и как же получить элемент по которому кликнули?

kolyan1983 14.08.2012 18:40

Цитата:

здесь при чем тут плагины - вы хотите получить свойства элемента
Может конечно я чего то жёстко не понимаю, но попробую объяснить. Мне нужно доработать jquery плагин. В нём вешается onblur примерно так: $('#element').blur(function(element){... И нужно внутри него определить куда кликнули. Вот эта штука alert(event.explicitOriginalTarget || event.toElement) добавленная в обработчик возвращает undefined в фф и null в ie8. А вариант с ф-ей blu вообще не представляется возможным.

Dim@ 14.08.2012 18:43

kolyan1983,
не тупите пожалуйста!
он же передается в вашу функцию и его можно алертить, вставлять и т.п.!
<script type="text/javascript">
function your_function(target){//ваша функция принимающая элемент
  alert("Элемент по которому кликнули после блура" + target + "ID элемента" + target.getAttribute("id"));
}
document.i = 0;
function blu(e){
 if (document.i != 5){return;}
 var e = e || window.event;
 var target = e.target || e.srcElement;
 your_function(target);//вызывайте свою функцию с тем элементом (который вам нужен)
//и там получайте его свойства
}
document.onclick = blu;
</script>
<div id="Это ид дива по которому ты щелкнул">Щелкни по мне что бы вызвалась твоя функция которая алертит мой ид</div>
<input type="text" onblur="document.i = 5;" onfocus="document.i = 0;">

P.S. также можно сделать так что бы клик срабатывал только один раз после блур-а - тогда надо добавить
document.i = 0;

после
var target = e.target || e.srcElement;

P.P.S. не видел пост выше - щас отвечу

Dim@ 14.08.2012 18:51

kolyan1983,
что же вам надо посочувствовать ибо нормально найти и кроссбраузерно у вас не получиться ;) и потом нахрена нужен тот плагин который вы пишите (что он будет делать и практическая ценность)?

kolyan1983 14.08.2012 18:56

ок. Я не пишу плагин. Задача требует приделать маскирование ввода в поле, к которому уже приделаны jquery validate + Query UI Datepicker. Получается конфликт. Вот и хотел немного подпилить плагин http://digitalbush.com/projects/masked-input-plugin/

Dim@ 14.08.2012 18:58

kolyan1983,
ясно - тогда вам нужен не я - я не знаю JQ :)

Aetae 14.08.2012 18:59

Вообще есть ещё такая штука как document.activeElement, но это не совсем то.

Dim@ 14.08.2012 19:02

Aetae,
активный элемент :blink: :blink:

Aetae 14.08.2012 19:09

<input onblur="setTimeout(function(){document.body.appendChild(document.createElement('div')).innerHTML=document.activeElement},10)">
<textarea onblur="setTimeout(function(){document.body.appendChild(document.createElement('div')).innerHTML=document.activeElement},10)"></textarea>

Работает только с редактируемыми элементами и body.
Таймаут нужен, т.к. в момент блюра ещё ни один элемент не успел получить фокуса.

Dim@ 14.08.2012 19:14

Aetae,
да это не то - ему же еще и дивы и т.п. нужно ;)

Aetae 14.08.2012 19:22

Хз, он вроде с инпутами работает.)
Вообще не вижу проблемы навесить лишний обработчик на документ и и по онфокус сохранять внутренню переменную, которую и использовать.

Dim@ 14.08.2012 19:26

Aetae,
вот вот - то самое что я предлагал :)


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