PDA

View Full Version : [Javascript] onClick e onDblClick


dany84
10-01-2007, 12:45
Ciao ragazzi!
ho un'ancora alla quale associo due eventi: onClick e onDblClick e al verificarsi di ognuno di questi eventi deve richiamare 2 funzioni distinte.
il problema è che anche quando clicco 2 volte sull'ancora, parte la funzione associata all'evento onClick, in quanto 1 click c'è sempre e comunque.
avevo pensato a questa soluzione, che però funziona solo in IE :muro: e non piace per niente al mio capo :rolleyes: :


var iTimeoutId = null;

function oneClick(url) {

iTimeoutId = setTimeout("location.href='" + url + "';", 500);

}

function twoClick(url,name) {
clearTimeout(iTimeoutId);
openWin(url,name);
}


ora vi chiedo: esiste un altro modo per fare ciò che mi serve che funzioni anche con FF e che non usi le funzioni setTimeout e clearTimeout?
(non tiratemi fuori setInterval e parenti per favore :D )

Grazie mille a tutti!

kk3z
10-01-2007, 14:11
Prova questo, per me funziona sia in Firefox che in iexplorer:
<html>
<head>
<script type="text/javascript">
var clicksCount = 0;
var timeoutId = 0;

function OnSingleClick()
{
alert("single click");
}
function OnDoubleClick()
{
clicksCount = 0;
clearTimeout(timeoutId);
alert("double click");
}
function OnMouseUp()
{
clicksCount++;

if (clicksCount == 1)
{
timeoutId = setTimeout(OnSingleClick, 500);
}
else
{
OnDoubleClick();
}
}
</script>
</head>

<body>
<a href="javascript:;" onMouseUp="OnMouseUp()">test</a>
</body>
</html>

Comunque, in ogni caso un doppio click attiva prima il singolo click, quindi non vedo altri modi per farlo se non con setTimeout/clearTimeout.

dany84
10-01-2007, 14:25
ti ringrazio, ma mi vietano di usare funzioni come setTimeout ecc... :rolleyes:
anch'io sinceramente non vedo in che altro modo farlo...avevo provato a guardare su web e forse, dico forse perchè non ho approfondito troppo data la lunghezza di una cosa simile, si può fare con una complessa gestione degli eventi, su cui non sono molto skillata purtroppo :( .
ho provato a fare qualcosa ma risulta veramente molto complicato e, dato che non è urgentissimo, mi riservo di riprovarci tra qualche giorno magari, quando ho più tempo a disposizione.
speravo che magari qualcuno avesse già avuto questo problema e potesse postare il suo codice, ma mi rendo conto che, dato che la soluzione più semplice è usare il timeout, chi avesse già avuto bisogno di uno script simile, abbia utilizzato tali funzioni.
tra l'altro ancora non mi è stato spiegato il motivo per cui non posso utilizzare anch'io quelle funzioni...bah!