Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Определение источника события в Mozilla 13 (https://javascript.ru/forum/events/29846-opredelenie-istochnika-sobytiya-v-mozilla-13-a.html)

LeD4eG 13.07.2012 18:54

Определение источника события в Mozilla 13
 
Добрый вечер!
Для определения источника события использую следующий код:

function funcName(event){
   var event = (event)? event : window.event,
        target = (event.target)? event.target : event.srcElement;
}
Далее по коду провожу манипуляции с источником события. И проблем не возник в Chrome 20, Opera 12,Safari 5, IE7-9. Однако, Mozilla 13 отличилась и выдаёт в консоль, что target underfined.
Не могли бы вы подсказать почему наблюдается такое поведение и как его избежать?

Заранее благодарен!

cyber 13.07.2012 20:23

ваш код можно сократить
var e = event || window.event;
var target = e && e.target || event.scrElement
.
откуда вы вызывает функцию(больше кода покажите)?

Раед 13.07.2012 22:07

Цитата:

Сообщение от cyber (Сообщение 188583)
ваш код можно сократить
var e = event || window.event;
var target = e && e.target || event.scrElement

Не-а
var target = event ? event.target : window.event.srcElement;


Цитата:

Сообщение от LeD4eG
Однако, Mozilla 13 отличилась и выдаёт в консоль, что target underfined.

А у меня всё работает. Попробуйте:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
document.onclick = function(event) {
 var target = event ? event.target : window.event.srcElement;
 alert(target.tagName);
};
</script>
</head><body>
<div>div</div>
<span>span</span><br>
<font>font</font>
</body></html>

cyber 13.07.2012 22:22

Цитата:

Сообщение от Раед (Сообщение 188595)
Не-а
var target = event ? event.target : window.event.srcElement;



А у меня всё работает. Попробуйте:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
document.onclick = function(event) {
 var target = event ? event.target : window.event.srcElement;
 alert(target.tagName);
};
</script>
</head><body>
<div>div</div>
<span>span</span><br>
<font>font</font>
</body></html>

ну тогда может так
var target = e&&e.target || event.srcElement;

Раед 14.07.2012 00:21

Цитата:

Сообщение от cyber
var target = e&&e.target || event.srcElement;

Да, тоже вариант

LeD4eG 14.07.2012 00:57

Функция вызывается из addEventListener. так в остальных-то браузерах работает. мне не понятно почему в Firefox данная проблема возникла.
Пысы: Спасибо за советы по сокращению.

Раед 14.07.2012 13:42

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
document.addEventListener('click', function(event) {
 var target = event ? event.target : window.event.srcElement;
 alert(target.tagName);
}, false);
</script>
</head><body>
<div>div</div>
<span>span</span><br>
<font>font</font>
</body></html>

Всё работает :)

LeD4eG 14.07.2012 15:44

Раед, я также обескуражен.
var elementLink = document.getElementById("elementID");
if(elementLink.addEventListener){
   elementLink.addEventListener("mousedown", funcName);
} else {
   elementLink.attachEvent("onmousedown", funcName);
}
function funcName(event){
    var event = (event)? event : window.event;
    var target = (event.target)? event.target : event.srcElement;
    //так как источник события изображение
    var oldSrc = target.src;
    ..........
}


Работает везде, кроме Mozilla 13 (target - underfined)

Раед 14.07.2012 17:21

LeD4eG,
HTML покажите

LeD4eG 15.07.2012 12:05

событие возникает в блоке при наведении
<a href="#"><img src="..."/></a>

Раед 15.07.2012 14:09

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
function f(event) {
 var target = event ? event.target : window.event.srcElement;
 console.log(target);
 alert(target.src);
}
document.addEventListener('mousedown', f, false);
</script>
</head><body>
<a href="#"><img src="http://javascript.ru/forum/image.php?u=17648&dateline=1338577823"></a>
</body></html>

Запустите в Firefox. Всё работает :D

LeD4eG 15.07.2012 18:54

Раед, ошибка в моём коде. всё верно. я что-то не досмотрел. ошибка заключалась в том, что event.target существует при условии существования event, а не event.target. Вот и получается, что остальные браузеры к ней просто "проще отнеслись".


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