2010-12-15 128 views
2

J'ai une table qui se développe/se contracte au clic. Cela fonctionne très bien, cependant, il y a un problème, parfois les utilisateurs peuvent vouloir copier du texte dans la table, et donc leur ligne contracte (sur le clic)Jquery click-event mais ne pas tenir enfoncé/marquer l'événement texte

Y a-t-il un moyen d'éviter que l'événement soit déclenché lors du clic mais pas si vous maintenez la souris et/ou marquez du texte?

Exemple de page: http://resihop.nu/search?from=&to=&when=&got_car=1&code=

Je beaucoup appriciate si vous pouvez fournir un exemple, je ne suis pas utilisé pour javascript. :)

Répondre

3

Effectuez l'événement mouseup - au lieu de click. Vous pouvez également vérifier la durée entre mousedown et mouseup pour décider si vous souhaitez traiter le clic.


Quelque chose comme this devrait faire l'affaire:

var lastMouseUp = 0, lastMouseDown = 0; 
$('tr').bind('mouseup mousedown', function(e){ 
    var ms = new Date().getTime(); 
    e.type == 'mousedown' ? lastMouseDown = ms : lastMouseUp = ms; 

    if(e.type != 'mousedown' && (Math.abs(lastMouseUp - lastMouseDown) < 300)) 
     console.log(Math.abs(lastMouseUp - lastMouseDown) + ' process click') // valid click 
}); 
+0

+1, tactique de Nice :), bien que ce ne est pas tomber la preuve, ce qui se passe si un utilisateur double-clique pour sélectionner tous? – RobertPitt

+0

@RobertPitt - Je ne vois pas comment ce serait un problème différent d'une situation de "clic". –

+0

oui après avoir lu plus de sa source je vois entièrement le problème maintenant. – RobertPitt

1

Vous pouvez aussi consulter le premier TR comme si

$('.generals .odd').click(/*...*/).css("cursor","pointer"); 

sso que seule la rangée supérieure peut être cliqué, laissant l'événement même tr gratuitement.

une autre solution serait de faire mouseup et vérifier la sélection de texte comme ceci:

$('tr').mouseup(function(){ 
    selection = document.getSelection ? document.getSelection() : document.selection.createRange().text; 

    if(!selection) 
    { 
     //carry on to de-expand 
    } 
}) 
+0

Aw, ça ne marche pas. :/ – Himmators

+0

Pourquoi pas? – RobertPitt