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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> смена обработчика события onDblClick 
:(
    Опции темы
aEk
Дата 19.9.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите, возможно ли менять то, что должно происходить в обработчике двойного нажатия мыши ?

Т.е. например, если делаем первое двойное нажатие, то происходит некое действие и обработчик onDblClick меняется с той целью, чтобы при втором двойном нажатии было выполнено другое действие.

Например:

<a href="javascript:void(0)" id="zzz" onDblClick="fff1();">test</a>

function  fff1()
{    i = document.getElementById("zzz");
    alert('that was fff1');    
    document.getElementById("zzz").ondblclick="fff2();";
}

function  fff2()
{    i = document.getElementById("zzz");
    alert('that was fff2');    
    document.getElementById("zzz").ondblclick="fff1();";
}

Но смены обработчика не происходит, т.е. он вообще пропадает.
PM MAIL   Вверх
dstorm81
Дата 19.9.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

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



а про переменные не забыл
Код

<a href="javascript:void(0)" id="zzz" onDblClick="fff1();">test</a>

function  fff1()
{

var rm=0;
if(rm==0)
    {
     i = document.getElementById("zzz");
    alert('that was fff1');    
    rm++
    }

else{
       i = document.getElementById("zzz");
       alert('that was fff2');    
       }

}



Это сообщение отредактировал(а) dstorm81 - 19.9.2006, 17:57


--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
aEk
Дата 20.9.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dstorm81 @ 19.9.2006,  17:54)
а про переменные не забыл

Извини, я не совсем тебя понял...

Я имел в виду, что подобная конструкция не срабатывает:  document.getElementById("id_of_element").ondblclick="my_func();".

Т.е. можно ли вприцнипе менять свойство ondblclick элемента.
PM MAIL   Вверх
vasac
Дата 20.9.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

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



Код

document.getElementById("zzz").ondblclick= fff2
...
document.getElementById("zzz").ondblclick= fff1

PM WWW   Вверх
aEk
Дата 21.9.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(vasac @ 20.9.2006,  19:29)
Код

document.getElementById("zzz").ondblclick= fff2
...
document.getElementById("zzz").ondblclick= fff1

То, что надо. Спасибо !

Но вот еще маленький вопрос: как передавать с параметром ?

Т.е. не document.getElementById("zzz").ondblclick= fff2, а  document.getElementById("zzz").ondblclick= fff2('test');

Если сделать так:

function  fff1(t)
{  t++;
    alert('that was fff1:'+t);    
    document.getElementById("zzz").ondblclick=fff2(t);
}

function  fff2(t)
{  t++;
    alert('that was fff2'+t);    
    document.getElementById("zzz").ondblclick=fff1(t);
}

То из fff1 после document.getElementById("zzz").ondblclick=fff2(t) начинает сразу выполняться fff2.
А в fff2 соотвественно после document.getElementById("zzz").ondblclick=fff1(t) начинает сразу работать fff1. 
В данном случае получается зацикливание. Но дело не в самом зацикливании и как его избежать, а как переопределить свойство ondblclick без вызова той функции с параматром. Если параметр не передавать, а писать просто document.getElementById("zzz").ondblclick= fff2, то все происходит так, как должно быть.
PM MAIL   Вверх
skyboy
Дата 21.9.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



дык document.getElementById("zzz").ondblclick= fff2('test'); - это ты сразу же вызываешь функцию, а результат уже записываешь в ondblclick. Можно реализовать так:
document.getElementById("zzz").ondblclick= function() {fff2('test');} 
Вот только анонимные функции, насколько мне известно, вызывают утечку памяти в IE...
PM MAIL   Вверх
aEk
Дата 21.9.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(skyboy @  21.9.2006,  11:52 Найти цитируемый пост)
дык document.getElementById("zzz").ondblclick= fff2('test'); - это ты сразу же вызываешь функцию, а результат уже записываешь в ondblclick. 

Да, что-то я совсем ерунду привел.

Цитата(skyboy @  21.9.2006,  11:52 Найти цитируемый пост)
Вот только анонимные функции, насколько мне известно, вызывают утечку памяти в IE... 

Это да. В общем, наверно  лучше сделать через дополнительные внешние переменные все в одной функции, без смены непосредственно обработчика ondblclick.
PM MAIL   Вверх
skyboy
Дата 21.9.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



с утечкой памяти всё решаемо:
-- либо ссылаешься на неанонимную функцию(document.getElementById("zzz").ondblclick= some_function;); конечно, контекст вызова копироваться не будет, так пойдёт только если ты планировал параметрами использовать константы, либо будешь обращаться к глобальным объектам
-- когда польза в объекте исчезнет(например, по выгрузке страницы: onunload), записываешь в ячейку null(document.getElementById("zzz").ondblclick= null;); после этого беда с анонимными функциями - не беда вовсе smile
PM MAIL   Вверх
aEk
Дата 21.9.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(skyboy @  21.9.2006,  15:03 Найти цитируемый пост)
-- либо ссылаешься на неанонимную функцию(document.getElementById("zzz").ondblclick= some_function;); конечно, контекст вызова копироваться не будет, так пойдёт только если ты планировал параметрами использовать константы, либо будешь обращаться к глобальным объектам

так я и сделал, с  обращением к глобальным переменным, просто чуток строк кода пришлось добавить
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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