Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№127-08-2005 15:49:41

Rion
Участник
 
Группа: Extensions
Откуда: Екатеринбург
Зарегистрирован: 15-06-2005
Сообщений: 227

js: перехват событий

вычитал я в документации по gecko следующее...

addEventListener
addEventListener allows the registration of event listeners on the event target.
Syntax
element.addEventListener( type, listener, useCapture )

useCapture
If true, useCapture indicates that the user wishes to initiate capture. After initiating capture, all events of the specified type will be dispatched to the registered EventListener before being dispatched to any EventTargets beneath them in the tree. Events which are bubbling upward through the tree will not trigger an EventListener designated to use capture.

так вот что-то от этого useCapture фаирфоксу не жарко не холодно. не перехватывает он события. вот тестовый код:

<html>
<body onLoad="document.getElementById('test').addEventListener('click', testfunc, true);">
<div style="border:1px solid black" id='test'>Здесь перехватывает</div>А здесь уже нет, хотя должен
<script type="text/javascript">
function testfunc () { alert("есть контакт"); }
</script>
</body>
</html>

вроде всё правильно делаю. в IE аналогичная ф-ия setCapture работает на ура. что можете подсказать?


кстати чтоб не создавать ещё одну тему, ещё один глюк. вот код:

<html>
<body>
<table border="20" rules="none">
  <tr><td>&nbsp;</td></tr>
</table>
</body>
</html>

Попробуйте вместо none поставить например groups или rows, в общем что угодно. посравнивайте с тем как это отрисовывает IE..

PS а где искать про глюки гекко? чтото на бугзилле такая куча продуктов.. где там именно про гекко...
PSS Mozilla/5.0 (Windows; U; Windows NT 5.0; ru; rv:1.8b4) Gecko/20050815 Firefox/1.0+

Отредактировано Rion (27-08-2005 16:23:19)


Gentoo Linux

Отсутствует

 

№227-08-2005 17:50:22

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: js: перехват событий

Взгляни на http://sleepyhead81.blogspot.com/2005/05/cross-browser-event-handling.html
Может поможет.


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№327-08-2005 18:30:23

Rion
Участник
 
Группа: Extensions
Откуда: Екатеринбург
Зарегистрирован: 15-06-2005
Сообщений: 227

Re: js: перехват событий

Unghost пишет

Взгляни на http://sleepyhead81.blogspot.com/2005/05/cross-browser-event-handling.html
Может поможет.

не помогло... да и пример который на этой страничке писали какие-то горе-программисты.. чтоб действительно стал кроссбраузерным пришлось его переделывать. в прочем что бы не делал, захват событий всё равно не работает. про оперу (там упоминается что она DOM2 юзает)  вообще молчу, при попытке использовать захват, вообще не то чтобы из вне события не доходят, так и от самого элемента на который listener ставим событий никаких нет. с фаирфоксом точно также как в моем примере...

вобщем пойду в бугзиллу постить баги и буду ждать новых версий фокса..


Gentoo Linux

Отсутствует

 

№427-08-2005 21:04:45

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: js: перехват событий

Rion,

<html>
<body onLoad="document.getElementById('test').addEventListener('click', testfunc, true);">
<div style="border:1px solid black" id='test'>Здесь перехватывает</div>А здесь уже нет, хотя должен
<script type="text/javascript">
function testfunc () { alert("есть контакт"); }
</script>
</body>
</html>

обработчик события назначается элементу с id='test', так что неудивительно, что вне этого элемента он не работает. А нужно, если я правильно понял, вот так:

...
<body onLoad="document.addEventListener('click', testfunc, true);">
...

P.S.: А еще проще - вот так:

...
<body onclick="testfunc();">
...

одинаково работает и в IE и в FF. Равно как и <div onclick=... и т. д.

Отредактировано Anton (27-08-2005 21:14:08)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№527-08-2005 21:32:09

Rion
Участник
 
Группа: Extensions
Откуда: Екатеринбург
Зарегистрирован: 15-06-2005
Сообщений: 227

Re: js: перехват событий

Anton пишет

обработчик события назначается элементу с id='test', так что неудивительно, что вне этого элемента он не работает. А нужно, если я правильно понял, вот так:

вся суть в использовании useCapture заключается в том что элемент перехватывает все события данного типа! т.е. согласно моему примеру если бы код перехватчика был такой

Выделить код

Код:

function testfunc () { alert(this.innerHTML); }

то мы если бы даже щелками мимо элемента то всё равно получали бы "Здесь перехватывает". так что твой пример не канает.. конечно всегда можно пойти обходным путем, но всё же хочется чтоб любимый браузер следовал тем стандартам о которых заявлено

хотя может я и гоню чего.. :) в IE при такой подходе this в любом случае на window указывает, короче гон ещё в большей степени...)

Отредактировано Rion (27-08-2005 21:52:04)


Gentoo Linux

Отсутствует

 

№627-08-2005 22:05:01

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: js: перехват событий

Так ведь в документации написано, что

After initiating capture, all events of the specified type will be dispatched to the registered EventListener before being dispatched to any EventTargets beneath them in the tree.

... все события указанного типа будут переданы зарегистрированному обработчику перед тем (т. е., до того), как они будут переданы приемникам, находящимся ниже в дереве элементов.

Действие параметра useCapture можно проследить по последовательности появления цифр "1" и "2" в следующем примере:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body onclick="document.getElementById('test').addEventListener('click', testfunc, false);">
<div id='test' style="border:1px solid black"><p onclick="alert('1');">Параграф с обработчиком</p><br/><p>Просто параграф</p></div>Какой-то текст
<script type="text/javascript">
function testfunc () { alert("2"); }
</script>
</body>
</html>


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№728-08-2005 18:40:01

ioppp
Участник
 
Группа: Members
Зарегистрирован: 16-07-2005
Сообщений: 879

Re: js: перехват событий

Anton
Посмотрел я твой пример, а также примеры Rion'а.
Смотрел я в DPa2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20050826 , Opera-8.10-7685, K-Meleon c разными ревизиями и Gecko,IE 6.0.2900.2180.xpsp2_gdr.050301-1519.
Opera отображает картинку твоего примера несколько по-другому, чем  Gecko и IE, а IE при клике на второй строчке - ноль эмоций, никаких цифр, хотя вроде бы я всё разрешил делать IE.


" ...Отметим лишь, что качество локализации программного обеспечения этого модема способно нанести человеку психическую травму, а посему настоятельно рекомендуем использовать английский интерфейс..."   (c) Басир Ахмедов .

Отсутствует

 

№828-08-2005 20:53:11

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: js: перехват событий

ioppp пишет

... а IE при клике на второй строчке - ноль эмоций, никаких цифр, хотя вроде бы я всё разрешил делать IE.

ioppp, так ведь я и не говорил, что пример из поста #6 работает в IE. То, что работает в IE, записано в постскриптуме поста #4.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№928-08-2005 22:33:38

ioppp
Участник
 
Группа: Members
Зарегистрирован: 16-07-2005
Сообщений: 879

Re: js: перехват событий

Многоуважаемый Anton
Это я написал под впечатлением бага в первом посте Rion'а.
Лазил по бугзилле, по http://www.mozilla.org/newlayout/faq.html и тому подобным местам ... :) - был весь в поиске.
Так что прошу прощения за свою невнимательность.
Вот !!!
:)


" ...Отметим лишь, что качество локализации программного обеспечения этого модема способно нанести человеку психическую травму, а посему настоятельно рекомендуем использовать английский интерфейс..."   (c) Басир Ахмедов .

Отсутствует

 

№1029-08-2005 10:36:09

Rion
Участник
 
Группа: Extensions
Откуда: Екатеринбург
Зарегистрирован: 15-06-2005
Сообщений: 227

Re: js: перехват событий

вот мой пример работающий в IE

Выделить код

Код:

<html>
<body>
<div style="border:1px solid black" id='test'>Здесь перехватывает</div>А здесь уже нет, хотя должен
<script type="text/javascript">
document.getElementById('test').attachEvent('onclick', testfunc);
document.getElementById('test').setCapture(true);
function testfunc () { alert("есть контакт"); }
</script>
</body>
</html>

всё что я хотел, это чтоб ф-ия addEventListener с использованием параметра useCapture работала также как этот пример

Это что еще за подпись такая? Мол, кликнешь, и винт отформатируется... Отлично. А ведь на форум ходят женщины, а они - очень любопытны по своей природе. Да и среди мужиков немало тех, что неглядя кликает куда попало. В общем, нарушение п3.8. Замечание. RED
Ответ: ну так я предупредил чтоб не кликали :)

Отредактировано Rion (31-08-2005 12:02:29)


Gentoo Linux

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]