Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > обработка события вложенного элемента


Автор: FoXIT 5.10.2011, 12:39
День добрый.

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

Код

<table>
     <tr>
             <td ondblclick='fun1()'>
              Текст
                   <table>
                   <tr><td onclick='fun2()'>Текст</td></tr>
                   </table>
             </td>
     </tr>
</table>

Автор: magelan 5.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>

Автор: FoXIT 6.10.2011, 07:48
Проверял в IE8 и Opera10

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

И еще вопросик, как передать параметры в fun2?

Автор: magelan 6.10.2011, 10:04
странно, что ругается, появится время - проверю.

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

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

Код

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

...

<script type="text/javascript">
var _fun2 =  function(e, obj)
{
        fun2( obj );
   ...

Автор: FoXIT 6.10.2011, 10:24
С event заработало. Параметры передаются..

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

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

Вопрос остаётся открытым.

Автор: magelan 6.10.2011, 10:49
даблклик тоже перехватываем, ога?
Код

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

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

Автор: FoXIT 6.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>



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

Добавлено через 4 минуты и 18 секунд
Цитата(magelan @ 6.10.2011,  10:49)
даблклик тоже перехватываем, ога?
Код

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

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

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

Добавлено через 5 минут и 11 секунд
Пока свой пост писал, получил ответ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)