Newsgroup: it.comp.lang.javascript
Titolo: onclick e dblclick sullo stesso elemento

salve a tutti,
vorrei sapere se esiste uno stratagemma che mi permetta di associare
ad uno stesso link sia l'evento "onclick" sia quello "dblclick".
grazie anticipatamente per le vostre risposte

nicol...@tiscalinet.it
 ha scritto:

usi un elemento interno con click e uno esterno contenitore (anche
invisibile) con l'evento doppo click

nicol...@tiscalinet.it
 ha scritto:

oppure puoi utilizzare una libreria nota tipo jquery:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "
http://www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
  <script src="
http://code.jquery.com/jquery-latest.js
"></script>
  <script>
  $(document).ready(function()
	{
		var bloc = $("div#blocco");
		$("div#blocco").bind("click", function()
		{
      bloc.toggleClass('singoloclic');
    });
		$("div#blocco").bind("dblclick", function()
		{
      bloc.toggleClass('doppioclic');
    });
  });
  </script>
  <style>
  div#blocco
	{
		background:blue;
    color:white;
    height:100px;
    width:200px;
	}
	div#blocco.singoloclic { background:yellow;color:black; }
	div#blocco.doppioclic { background:red;color:black; }
  </style>
</head>
<body>
<p>
  <div id="blocco"></div>
	<span>click o dblClick sul blocco</span>
</p>
</body>
</html>

 
nicola1...@tiscalinet.it
 ha scritto:> salve a tutti,

grazie mille...mentre per prototype c'è qualcosa di analogo?

 grazie mille...mentre per prototype c'� qualcosa di analogo?
l'ho buttato gi� ora, dovrebbe funzionare: versione prototype
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "
http://www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
  <script src="prototype.js"></script>
  <script>
	document.observe("dom:loaded", function()
	{
		$('blocco').observe('click', respondToClick);
		$('blocco').observe('dblclick', respondToDBClick);
	});
	function respondToClick(event)
	{
		var element = event.element();
		if (element.hasClassName('singoloclic'))
		{
			element.removeClassName('singoloclic')
		}
		else
		{
			element.addClassName('singoloclic');
		}
	}
	function respondToDBClick(event)
	{
		var element = event.element();
		if (element.hasClassName('doppioclic'))
		{
			element.removeClassName('doppioclic')
		}
		else
		{
			element.addClassName('doppioclic');


personalmente mi piace pi� jquery anche se ultimamente mi sta intrigando
anche mootools anche se non ho ancora avuto modo di provarlo in un
progetto pratico

mi sono scordato di scrivere, l'ho fatto basandomi sull'ultima versione
stabile della 1.6 (che comunque � di settembre) non credo funzioni con
la vecchia serie 1.5
michelangelo

 michelangelo
grazie mille..ora provo

 l'ho buttato giù ora, dovrebbe funzionare: versione prototype

ho fatto un pò di prove..ma non mi sembra che funzioni in tutti i casi
comunque il problema principale è dovuto al fatto che in caso di
doppio click viene prima eseguito l'evento associato al click :(.
Mi serve associare click e dblclick ad un elemento - che nel mio caso
è il contenuto del <th> - perchè dovrei... facendo click
sull'intestazione di una tabella far visualizzare una textbox per
effettuare una ricerca tra i valori di quella colonna, mentre il
doppio click deve ordinare i dati della stessa....con questa soluzione-
prototype al doppio click si visualizza prima la textbox e poi parte
l'ordinamento :(

 l'ordinamento :(
mettici un bottone ordina, ho paura che in un browser l'evento
doubleclick scateni sempre anche un evento click

 doubleclick scateni sempre anche un evento click
è anche la mia paura.
Comunque forse una mezza idea su come simulare il click e doppio click
l'ho avuta:
1- stabilisco quanti millisecondi richiede un doppio click;
2- al click sull'intestazione della tabella faccio partire un
cronometro che si ferma quando quei millisecondi impostati nel punto
1sono stati raggiunti;
3- in questo brevissimo arco di tempo conto i click fatti:
      1 click -> faccio partire l'evento 'onclick',
      2 o più click -> parte l'evento 'ondblclick';
che dici potrebbe essere una buona soluzione? appena ritornerò a casa
vedrò di testare questa mia idea

        2 o pi� click ->  parte l'evento 'ondblclick';
Diciamo che la base c'�, ma l'hai complicata un poco; forse perch�
sei pi� avvezzo ad altri linguaggi di programmazione:
- Nell'evento onclick imposti un timeout tramite setTimeout(), che
andr� ad eseguire la funzione preposta alla comparsa della textbox
- Nell'evento ondblclick andrai a cancellare tale timeout.
Per quanto riguarda il timing direi di impostarlo non superiore ai
500ms. Putroppo, il delay del doppio click non � standardizzato.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."