Eu tenho um único botão em li com id "my_id"
. Anexei dois eventos jQuery com este elemento
1
$("#my_id").click(function() {
alert('single click');
});
2
$("#my_id").dblclick(function() {
alert('double click');
});
Mas toda vez que me dá o single click
javascript
jquery
jquery-events
user426795
fonte
fonte
Respostas:
Você precisa usar um tempo limite para verificar se há um outro clique após o primeiro clique.
Aqui está o truque :
Uso:
EDITAR:
Conforme declarado abaixo, prefira usar o
dblclick
evento nativo : http://www.quirksmode.org/dom/events/click.htmlOu aquele fornecido pela jQuery: http://api.jquery.com/dblclick/
fonte
dblclick
eventodblclick
é definitivamente o caminho a percorrer hoje. jQuery também lida com este evento: api.jquery.com/dblclickevent.detail
disponível, é a melhor maneira de detectar um clique duplo no manipulador de cliques. Veja esta resposta .O comportamento do
dblclick
evento é explicado em Quirksmode .A ordem dos eventos para um
dblclick
é:A única exceção a essa regra é (claro) o Internet Explorer com sua ordem personalizada de:
Como você pode ver, ouvir os dois eventos juntos no mesmo elemento resultará em chamadas extras para seu
click
manipulador.fonte
dblclick
é mesmo confiável ... se eu clicar uma vez ... espere um ou dois segundos, depois clique novamente, recebo umdblclick
evento no segundo clique!event.detail
disponível, é a melhor maneira de detectar um clique duplo no manipulador de cliques. Veja esta resposta .Em vez de utilizar mais estados ad-hoc e setTimeout, descobrimos que existe uma propriedade nativa chamada
detail
que você pode acessar a partir doevent
objeto!Navegadores modernos e até mesmo o IE-9 suportam :)
Fonte: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
fonte
event.detail === 1
) ainda será acionado. Veja meu violino ou este comentário neste tópico .if(evt.detail !== 1) return;
rejeitar o dobro acidental cliques bloquearão o acesso a esse botão para usuários sem o mouse.Uma função simples. Nenhum jquery ou outra estrutura é necessária. Passe suas funções como parâmetros
fonte
el.dataset.dblclick
seria uma maneira melhor de fazer isso agora.event.detail
disponível, é a melhor maneira de detectar um clique duplo no manipulador de cliques. Veja esta resposta .Receio que o comportamento dependa do navegador:
http://api.jquery.com/dblclick/
Executando seu código no Firefox, o alert () no
click()
manipulador evita que você clique uma segunda vez. Se você remover esse alerta, obterá os dois eventos.fonte
event.detail
disponível, é a melhor maneira de detectar um clique duplo no manipulador de cliques. Veja esta resposta .Bem, para clicar duas vezes (clique duas vezes), você deve primeiro clicar uma vez. O
click()
manipulador dispara em seu primeiro clique e, como o alerta é exibido, você não tem chance de dar o segundo clique para disparar odblclick()
manipulador.Mude seus manipuladores para fazer algo diferente de um
alert()
e você verá o comportamento. (talvez mude a cor de fundo do elemento):fonte
Esta resposta tornou-se obsoleta com o tempo, verifique a solução de @kyw.
Criei uma solução inspirada na essência postada por @AdrienSchuler. Use esta solução apenas quando quiser vincular um único clique E um clique duplo a um elemento. Caso contrário, recomendo usar o nativo
click
e osdblclick
ouvintes.Estas são as diferenças:
setTimeout
para manipular o manipulador de clique ou duplo cliqueJavascript:
Uso:
Abaixo está o uso em um jsfiddle, o botão jQuery é o comportamento da resposta aceita.
jsfiddle
fonte
Outra solução Vanilla simples baseada na resposta A1rPun (veja seu violino para a solução jQuery, e ambas estão nesta ).
Parece que para NÃO acionar um gerenciador de clique único quando o usuário clica duas vezes, o gerenciador de clique único é necessariamente acionado após um atraso ...
fonte
event.detail
disponível, é a melhor maneira de detectar um clique duplo no manipulador de cliques. Veja esta resposta .Aqui está uma alternativa ao código de jeum para um número arbitrário de eventos:
Necessário para um aplicativo cytoscape.js .
fonte
this
, que é o elemento clicado, e passá-la para o manipulador (ao ladoe
ou em vez dele).Como diferenciar entre cliques únicos e cliques duplos em um mesmo elemento?
Se você não precisa misturá-los, você pode confiar em
click
edblclick
e cada um fará o trabalho perfeitamente.Surge um problema ao tentar misturá-los: um
dblclick
evento irá, na verdade, disparar umclick
evento também , então você precisa determinar se um único clique é um clique único "independente" ou parte de um clique duplo.Além disso: você não deve usar ambos
click
edblclick
em um e o mesmo elemento :Agora vamos às boas notícias:
Você pode usar a
detail
propriedade do evento para detectar o número de cliques relacionados ao evento. Isso torna os cliques duplos dentro doclick
razoavelmente fáceis de detectar.O problema continua em detectar cliques únicos e se eles fazem parte de um clique duplo ou não. Para isso, voltamos a usar um cronômetro e
setTimeout
.Empacotando tudo junto, com o uso de um atributo de dados (para evitar uma variável global) e sem a necessidade de contarmos nós mesmos, obtemos:
HTML:
JavaScript:
Demo:
JSfiddle
Observações sobre acessibilidade e velocidades de clique duplo:
Demorou um pouco para encontrar uma solução satisfatória, espero que isso ajude!
fonte
Use o excelente plugin jQuery Sparkle. O plug-in oferece a opção de detectar o primeiro e o último clique. Você pode usá-lo para diferenciar entre clique e clique duplo, detectando se outro clique foi seguido pelo primeiro clique.
Confira em http://balupton.com/sandbox/jquery-sparkle/demo/
fonte
Eu escrevi um plugin jQuery simples que permite que você use um evento personalizado 'singleclick' para diferenciar um único clique de um clique duplo:
https://github.com/omriyariv/jquery-singleclick
fonte
A resposta correta moderna é uma mistura entre a resposta aceita e a solução de @kyw. Você precisa de um tempo limite para evitar o primeiro clique único e a
event.detail
verificação para evitar o segundo clique.fonte
Eu gosto de evitar jquery (e outras libs de 90-140k) e, como observado, os navegadores lidam com onclick primeiro, então aqui está o que eu fiz em um site que criei (este exemplo também cobre a obtenção de um local clicado local xy)
espero que ajude
fonte
Com base na resposta de Adrien Schuler (muito obrigado !!!), para Datatables.net e para muitos usos, aqui está uma modificação:
Função
Usar
fonte
isso funcionou para mim-
uso-
fonte
Apenas postando a resposta HTML nativa apenas no caso de a necessidade ser fácil e HTML.
É claro que isso tem opções nativas do Jquery. ou seja ...
$('#id').attr('ondblclick',function(){...})
ou, como afirmado anteriormente,$('#id').dblclick(function(){...});
fonte
Eu sei que isso é antigo, mas abaixo está um único exemplo JS de um contador de loop básico com um único temporizador para determinar um clique único vs duplo. Espero que isso ajude alguém.
fonte