2011-01-26 20 views
6

ho il seguente evento che gestisce il codice:jQuery evento di selezione del testo

$('#main').delegate('.slide', 'click', function() { 
    slideshow.next(); 
}); 
$('#main').delegate('a', 'click', function (e) { 
    e.stopPropagation(); 
}); 

.slide è una grande div con il contenuto. slideshow.next() viene chiamato quando si fa clic su .slide, tranne quando viene fatto clic su un collegamento, nel qual caso stopPropagation() e .slide non riceve mai l'evento click.

Vorrei rendere possibile la selezione del testo sulla diapositiva. Al momento, se clicco e trascino, quando rilascio il mouse la selezione funziona ma .slide registra il clic e attiva la funzione slideshow.next(). C'è un evento che posso intercettare?

La pagina è available here.


Edit: È interessante notare che, se la selezione si estende su più di un elemento HTML, click non è sparato, ma la selezione è all'interno di un elemento, si è sparato.


Edit2: Ok, ecco la mia soluzione:

function setupHandlers() { 
    var prevX = 0; 
    var prevY = 0; 

    $('#main').delegate('.slide', 'click', function (e) { 
    var clickTolerance = 2; 
    var dx = Math.abs(e.pageX - prevX); 
    var dy = Math.abs(e.pageY - prevY); 
    //if mouse has moved less than two pixels in any direction this is a click 
    if (dx < clickTolerance && dy < clickTolerance) { 
     slideshow.next(); 
    } 
    }); 
    $('#main').delegate('.slide', 'mousedown', function (e) { 
    prevX = e.pageX; 
    prevY = e.pageY; 
    }); 
    $('#main').delegate('a', 'click', function (e) { 
    //Clicks on links shouldn't fire '.slide'.click() above 
    e.stopPropagation(); 
    }); 
} 

risposta

2

Qual è la differenza tra un singolo clic e un clic che seleziona il testo?

Direi che potrebbe riguardare il tempo trascorso tra il clic giù e il clic del mouse. In alternativa e forse più importante, potrebbe essere diagnosticata dalla differenza nella posizione dello schermo del mouse al momento del clic giù e al momento dell'evento del mouse su.

Quando viene eseguito l'evento mouseDown, registrare i valori event.pageX e event.pageY. Quando viene attivato l'evento mouseUp, confrontare le coordinate x, y memorizzate con la corrente. Se sono diversi, era una selezione di testo ... non fare nulla. Se sono uguali, scambia la tua pagina.

Non sei sicuro di come implementare questo in JScript, purtroppo;)

+0

grazie, stavo arrivando a pensare che questa potrebbe essere l'unica soluzione – Skilldrick

+0

@Skilldrick Fatemi sapere se provate questo ~ buona fortuna –

+0

Sono andato con questa soluzione - ha aggiornato la domanda con il mio codice di lavoro Cheers :) – Skilldrick

0

uso $('.slide').select per catturare l'evento di selezione e fermare la propagazione.

+0

'.select' funziona solo per gli elementi dei moduli :( – Skilldrick

+0

Non voglio votare questo giù ma è la risposta sbagliata - .select è per la forma – Skilldrick

Problemi correlati