Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   2 события для ссылки :) (https://javascript.ru/forum/jquery/16157-2-sobytiya-dlya-ssylki.html)

BorisBritva 28.03.2011 15:43

2 события для ссылки :)
 
Помогите решить задачку плиз :)

Есть ссылка.

Надо чтобы она сробатывала на 2 события. click(); и dblclick();

при dblclick() юзер перенаправляется по ссылке.
при click() просто подгружается инфа через ajax но юзер не перенаправляется по ссылке.

Как отследить будет пользователь нажимать dblclick()? Если да?, то чтобы подгрузка инфы через ajax на click() не сробатывала?

Может кто подскажет оптимальный вариант?

Спасибо :)

melky 28.03.2011 17:12

то,что сразу возникло в голове :

$(elem).bind('click dblclick',function(e){

if(e.type == 'click'){
//подгружаем инфу на аяксе
return false;
}else {
//??? просто направляем?
}

})


НО firebug говорит,что возникает два click,перед одним dblclick.

считать одиночные клики и определять,делится ли кол-во на 2, не имеет смысла.

очевидно, придется делать либо через таймауты , либо считать количество кликов(?).


я попробовал через говнокодные таймауты.

гавнокодные,потому что :
когда делал через SetTimeout при одиночном клике , то на двойном клике (dblclick) таймаут не снимался (хз,почему.. таймаут был в window, ClearTimeout(t) ошибок не выдавал,но и не работал )


// HTML -- > <a href="http://google.ru/" id="a">google</a>


el = $(document.getElementById('a')),doo=false

el.bind('click dblclick',

function(e){
  
if(e.type=='dblclick') {
  
  doo = false;
  
  } else {
    
t = setTimeout(function(){
     if(doo) el.css('color','red');
//тут подгрузка через аякс
   },200)
doo = true;

  }
  return false; // чтобы не переходил по ссылке
  
}) // handler and bind end


протестил,у меня работает

сомневаюсь,что я написал этот код хорошо , потому что :
  • в window для каждой ссылки добавляется свой doo (можно сделать это через $.data(),или что-то подобное)
  • таймаут в 200ms - это время даблклика наглазок.(для полной уверенности это время нужно замерять?)
  • при одиночном клике некоторое время ссылка остается синей, а потом меняет цвет на красный

кстати, любимый гугл не дал ответа ))

BorisBritva 29.03.2011 16:10

Спасибо melky.

Попробую замутить по Вашему принципу.


Часовой пояс GMT +3, время: 14:55.