2013-08-19 20 views

Odpowiedz

13

Musisz zrobić swoją „własną” wykrywanie DoubleClick

Coś takiego mogłoby działać:

var clickedOnce = false; 
var timer; 

$("#test").bind("click", function(){ 
    if (clickedOnce) { 
     run_on_double_click(); 
    } else { 
     timer = setTimeout(function() { 
      run_on_simple_click(parameter); 
     }, 150); 
     clickedOnce = true; 
    } 
}); 

function run_on_simple_click(parameter) { 
    alert(parameter); 
    alert("simpleclick"); 
    clickedOnce = false; 
} 

function run_on_double_click() { 
    clickedOnce = false; 
    clearTimeout(timer); 
    alert("doubleclick"); 
} 

Oto pracuje JSFiddle

Aby uzyskać więcej informacji na temat tego, co opóźnienie powinno używać do licznik czasu, zajrzyj tutaj: How to use both onclick and ondblclick on an element?

+0

Nie działa nieprawidłowo. Sprawdź to ponownie –

+0

Powinien być naprawiony –

+0

Myślę, że powinniśmy zrobić coś takiego: Poczekaj na funkcję kliknięcia.Jeśli nic się nie stanie przez mniej więcej sekundę po kliknięciu, włącz alert ("pojedyncze kliknięcie"). Lub jeśli istnieje inne zdarzenie kliknięcia w ciągu sekundy po pierwszym kliknięciu, a następnie alert ("kliknięcie dbl"). Co myślisz? –

3
$("#test-id").bind("click dblclick", function(){alert("hello")}); 

działa zarówno kliknij i dblclick

EDIT -

myślę, że nie jest możliwe. Próbowałem czegoś takiego.

$("#test").bind({ 
    dblclick: function(){alert("Hii")}, 
    mousedown: function(){alert("hello")} 

}); 

Nie można jednak uzyskać podwójnego kliknięcia bez przechodzenia przez jedno kliknięcie. Próbowałem myszy, ale nie daje żadnego rozwiązania.

+0

Jak powiązać różne funkcje z tymi dwoma zdarzeniami? – SolessChong

+0

Więc chcesz jedną dwie oddzielne funkcje. Jeden dla pojedynczego kliknięcia, a drugi dla podwójnego kliknięcia? –

+0

Powinieneś prawdopodobnie wykonać niestandardowe dwukrotne kliknięcie, ponieważ w praktyce nie można wykryć, czy kliknięcie było dwukrotne kliknięcie, ponieważ podwójne kliknięcie składa się z dwóch kliknięć. Wystarczy skorzystać z funkcji sprawdzania, czy użytkownik kliknął dwa razy w okresie ważności certyfikatu. –

0

musisz śledzić podwójne kliknięcie i jeśli nie jest to podwójne c Lick wykonać kliknięcie. Spróbuj

<p id="demo"></p> 
<button id='btn'>Click and DoubleClick</button> 
<script> 
var doubleclick =false; 
var clicktimeoutid = 0; 
var dblclicktimeoutid = 0; 
var clickcheck = function(e){ 
    if(!clicktimeoutid) 
     clicktimeoutid = setTimeout(function(){ 
      if(!doubleclick) 
       performclick(e); 
      clicktimeoutid =0; 
     },300); 
} 

var performclick =function(e){ 
    document.getElementById("demo").innerHTML += 'click'; 
} 
var performdblclick = function(e) 
{ 
    doubleclick = true; 
    document.getElementById("demo").innerHTML += 'dblclick'; 
    dblclicktimeoutid = setTimeout(function(){doubleclick = false},800); 
}; 
document.getElementById("btn").ondblclick = performdblclick; 
document.getElementById("btn").onclick=clickcheck; 
</script> 
0

ja dość dużo stosować tę samą logikę jak Jeremy D.

Jednak w moim przypadku, to było bardziej zadbane, aby rozwiązać tę rzecz z funkcji anonimowych, a nieco wolniej podwójne kliknięcie Timeout :

dblclick_timer = false 
.on("click", function(d) { 
    // if double click timer is active, this click is the double click 
    if (dblclick_timer) 
    { 
     clearTimeout(dblclick_timer) 
     dblclick_timer = false 
     // double click code code comes here 
     console.log("double click fired") 
    } 
    // otherwise, what to do after single click (double click has timed out) 
    else dblclick_timer = setTimeout(function(){ 
     dblclick_timer = false 
     // single click code code comes here 
     console.log("single click fired") 
    }, 250) 
}) 
0

nieco odmienne podejście - rzeczywista porównania kliknij dzieje się później w funkcję czasu, po upływie zadanego przedziału ... do tej pory po prostu zachować kartę na flagach.

z kilkoma prostymi modyfikacjami (licznik kliknięć zamiast flag) może również zostać rozszerzony na dowolną liczbę szybkich kolejnych kliknięć (potrójne kliknięcie, i in.), Ograniczone przez praktyczność.

var clicked = false, 
    dblClicked = false, 
    clickTimer; 



function onClick(param){ 
    console.log('Node clicked. param - ',param); 
}; 

function onDoubleClick(param){ 
    console.log('Node Double clicked. param - ',param); 
}; 

function clickCheck(param){ 
    if (!clicked){ 
     clicked = true; 
     clickTimer = setTimeout(function(){ 
      if(dblClicked){ 
       onDoubleClick(param); 
      } 

      else if(clicked){ 
       onClick(param); 
      } 

      clicked = false; 
      dblClicked = false; 
      clearTimeout(clickTimer); 

     },150); 
    } else { 
     dblClicked = true; 
    } 
};