2012-04-30 16 views
27

Tengo un <div> con un montón de texto en él. Este <div> también tiene un evento .click() usando jQuery.jQuery .click() se activa al seleccionar/resaltar texto

El problema que tengo es que el .click() se activa al seleccionar/resaltar el texto. Incluso manteniendo presionado el mouse durante varios segundos antes de soltarlo.

Aquí es una jsFiddle que muestra el problema: http://jsfiddle.net/ym5JX/

El comportamiento que yo esperaría es que resaltar el texto no es lo mismo que hacer clic en el elemento.

+1

Eso es debido a que un '' click' es un mousedown' seguido por un 'mouseup'. –

+3

'mousedown + mouseup = click. Resaltar lo hace, por lo que se activa el clic. –

+0

¿Cuál es el gran misterio aquí? – j08691

Respuesta

57

Eso es porque click es mousedown seguido de mouseup. Mi sugerencia es marcar getSelection dentro del controlador click. Si está configurado, entonces seleccionó algo, de lo contrario solo hizo clic.

$('#click').click(function() { 
    var sel = getSelection().toString(); 
    if(!sel){ 
     alert("clicked"); 
    } 
});​ 

DEMO: http://jsfiddle.net/ym5JX/3/

+1

Este es el comportamiento que estoy buscando, ¡gracias! – krische

+0

De nada :-) –

+2

probablemente desee comprobar la longitud 'haveSel = getSelection(). ToString(). Length> 0' –

6

Como he publicado en comentario, mosuedown + mouseup = click que es exactamente lo que hace destacar. No hay solución para este .. ver más abajo,

var isClick = 0; 
$('#click').click(function() { 
    if (isClick == 1) { 
     alert("clicked"); 
    } 
}).mousedown(function() { 
    isClick = 1; 
}).mousemove(function() { 
    isClick = 0; 
}); 

DEMO

+5

Comprobando si el mouse se movió entre 'mousedown' y' mouseup', listo :-P –

Cuestiones relacionadas