обработка события вложенного элемента

 
0
 
JavaScript
ava
FoXIT | 05.10.2011, 13:39
День добрый.

Есть ячейка таблицы, на ней событие ondblclick, в этой ячейке есть другая таблица с ячейками на которых onclick.
Если дважды щелкнуть по вложенной ячейке, вызывается обработчик onclick и сразу ondblclick. А мне нужен только onclick
Как от этого избавиться?


<table>
<tr>
<td ondblclick='fun1()'>
Текст
<table>
<tr><td onclick='fun2()'>Текст</td></tr>
</table>
</td>
</tr>
</table>
Kommentare (6)
ava
magelan | 05.10.2011, 16:28 #
попробуйте что-то типа:


<table>
<tr>
<td ondblclick='fun1()'>
Текст
<table>
<tr><td onclick='_fun2(e)'>Текст</td></tr>
</table>
</td>
</tr>
</table>
<script type="text/javascript">
var _fun2 = function(e)
{
fun2()
e = e || window.event;
if( e.stopPropagation )
e.stopPropagation();
else
e.cancelBubble = true;
if( e.preventDefault )
e.preventDefault();
else
e.returnValue = false;
}
</script>
ava
FoXIT | 06.10.2011, 07:48 #
Проверял в IE8 и Opera10

в эксплорере ругается что "e-определение отсутствует"
в опере тоже "Uncaught exception: ReferenceError: Undefined variable: e"

И еще вопросик, как передать параметры в fun2?
ava
magelan | 06.10.2011, 10:04 #
странно, что ругается, появится время - проверю.

попробуйте вызывать со словом event.

параметры передаются как обычно


<td onclick='_fun2(event, this)'>Текст</td>

...

<script type="text/javascript">
var _fun2 = function(e, obj)
{
fun2( obj );
...
ava
FoXIT | 06.10.2011, 10:24 #
С event заработало. Параметры передаются..

В ие e.cancelBubble устанавливается в true.

Но fun1() всё равно вызывается, и в ие и в опере.

Вопрос остаётся открытым.
ava
magelan | 06.10.2011, 10:49 #
даблклик тоже перехватываем, ога?

<tr><td onclick='_fun2(event)' ondblclick='return false;'>Текст</td></tr>

Можно даже без отмены события обойтись, наверное.
ava
FoXIT | 06.10.2011, 10:51 #
Понял в чем проблема!
Останавливается всплытие onclick! А надо остановить всплытие ondblclick.


<table>
<tr>
<td ondblclick='fun1()'>
Текст
<table>
<tr><td onclick='fun2()' ondblclick='_fun2(event)'>Текст</td></tr>
</table>
</td>
</tr>
</table>
<script type="text/javascript">
var _fun2 = function(e)
{
e = e || window.event;
if( e.stopPropagation )
e.stopPropagation();
else
e.cancelBubble = true;
if( e.preventDefault )
e.preventDefault();
else
e.returnValue = false;
}
</script>



Вот так работает.
Всем спасибо.

später ergänzt:
Цитата (magelan @ 6.10.2011, 10:49)
даблклик тоже перехватываем, ога?



<tr><td onclick='_fun2(event)' ondblclick='return false;'>Текст</td></tr>



Можно даже без отмены события обойтись, наверное.

Так пробовал, не работает, дабл всё равно всплывает.

später ergänzt:
Пока свой пост писал, получил ответ.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  FoXIT   magelan
advanced
Absenden