2012-04-17 11 views
7

Dire che ho un (li) Lista ul nella pagina:Come prevenire il doppio clic selezionare il testo in javascript

<ul> 
<li>xxx<li> 
<li>xxx<li> 
</ul> 

L'elemento li sono cliccabili e fare doppio cliccabile, essi sono attaccati con questi eventi e I return false in entrambi.

$('ul li').on('click',function(){ 
    //do what I want 
    return false; 
}).on('dblclick',function(){ 
    //do what I want 
    return false; 
}); 

Ma quando l'utente fa doppio clic l'elemento, viene selezionato il testo all'interno li. Come può essere prevenuto?

Aggiornamento:

ora risolto, io uso il seguente codice con il selettore CSS da NiftyDude:

$('ul li').on('click',function(){ 
    //do what I want 
    return false; 
}).....on('dragstart',function(){return false;}).on('selectstart',function(){return false;}); 
+1

Come nota a margine, probabilmente si desidera utilizzare ['e.preventDefault()' invece di 'return false'] (http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false). –

+0

Non funziona anche – hguser

+0

Non dovrebbe essere una soluzione, è solo qualcosa che dovresti sapere e fare. –

risposta

18

È possibile disabilitare la selezione del testo utilizzando i CSS (Si noti che ciò disabiliterà efficacemente tutti i metodi di selezione e non solo il doppio clic)

ul li { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 

http://jsfiddle.net/T3d7v/1/

+1

Nota che questo disabiliterà * tutto * metodi di selezione, non solo doppio clic. –

+0

Hmm, hai ragione, cambierò se avrò una soluzione migliore –

+0

Non sono sicuro che ce ne sia uno, basta notare, quindi è chiaro ':)'. –

2

Non si può fermare il select accada, ma si può cancellare la selezione subito dopo è fatto:

<script type="text/javascript"> 
document.ondblclick = function(evt) { 
    if (window.getSelection) 
     window.getSelection().removeAllRanges(); 
    else if (document.selection) 
     document.selection.empty(); 
} 
</script> 

Per evitare che anche selezionando intero paragrafo per "triple click", qui è il codice richiesto:

var _tripleClickTimer = 0; 
document.ondblclick = function(evt) { 
    ClearSelection(); 
    window.clearTimeout(_tripleClickTimer); 

    //handle triple click selecting whole paragraph 
    document.onclick = function() { 
     ClearSelection(); 
    }; 

    _tripleClickTimer = window.setTimeout(function() { 
      document.onclick = null; 
    }, 1000); 
}; 

function ClearSelection() { 
    if (window.getSelection) 
     window.getSelection().removeAllRanges(); 
    else if (document.selection) 
     document.selection.empty(); 
} 

Source/Live test.

Questo dovrebbe funzionare su qualsiasi browser, si prega di segnalare qualsiasi browser in cui non funziona.

+0

: controlla questo'http: // i.stack.imgur.com/5X5Sp.png' – hguser

+0

Cosa intendi? – Pachonk

+0

Posso selezionare il testo. – hguser

Problemi correlati