Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка события вложенного элемента 
V
    Опции темы
FoXIT
Дата 5.10.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



День добрый.

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

Код

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

PM MAIL   Вверх
magelan
Дата 5.10.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



попробуйте что-то типа:

Код

<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>

PM MAIL   Вверх
FoXIT
Дата 6.10.2011, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Проверял в IE8 и Opera10

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

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

Это сообщение отредактировал(а) FoXIT - 6.10.2011, 08:09
PM MAIL   Вверх
magelan
Дата 6.10.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



странно, что ругается, появится время - проверю.

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

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

Код

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

...

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

PM MAIL   Вверх
FoXIT
Дата 6.10.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



С event заработало. Параметры передаются..

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

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

Вопрос остаётся открытым.
PM MAIL   Вверх
magelan
Дата 6.10.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



даблклик тоже перехватываем, ога?
Код

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

Можно даже без отмены события обойтись, наверное.
PM MAIL   Вверх
FoXIT
Дата 6.10.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Понял в чем проблема!
Останавливается всплытие 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 секунд
Пока свой пост писал, получил ответ.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.