2009-08-23 13 views
39

Ho una tabella e autorizzo gli utenti a 'selezionare' più righe. Tutto questo viene gestito usando eventi jQuery e alcuni CSS per indicare visivamente che la riga è 'selezionata'. Quando l'utente preme shift, è possibile selezionare più righe. A volte questo causa di evidenziare il testo. C'è comunque per impedirlo?Evita l'evidenziazione del testo Tabella

+0

possibile duplicato di [regola CSS per disabilitare l'evidenziazione selezione testo] (http://stackoverflow.com/questions/826782/css-rule-to- disable-text-selection-highlighting) – Dan

risposta

71

C'è una proprietà CSS3 per questo.

#yourTable { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
+20

Peccato che a Internet Explorer non importi nulla. Testato tra 6-8. –

+1

@NathanTaylor Dopo aver cercato su google, troverai un duplicato dove questo è già stato risolto: http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting – Dan

+0

'Validation (CSS 3.0):" moz-none "non è un valore valido per la proprietà" -moz-user-select ". E in effetti, questo non ha funzionato con Firefox finché non ho cambiato' moz-none' in 'none'. – Nolonar

1

Si può provare con la funzione focus() sul testo selezionato - la selezione scompare.

$('#someEl').focus(); 
30

Se si desidera avere il controllo quando gli utenti possono selezionare o meno le parti del tuo sito, è possibile utilizzare questo little jQuery plugin.

jQuery.fn.extend({ 
     disableSelection : function() { 
       return this.each(function() { 
         this.onselectstart = function() { return false; }; 
         this.unselectable = "on"; 
         jQuery(this).css('user-select', 'none'); 
         jQuery(this).css('-o-user-select', 'none'); 
         jQuery(this).css('-moz-user-select', 'none'); 
         jQuery(this).css('-khtml-user-select', 'none'); 
         jQuery(this).css('-webkit-user-select', 'none'); 
       }); 
     } 
}); 

e usarlo come:

// disable selection on #theDiv object 
$('#theDiv').disableSelection(); 

In caso contrario, si può semplicemente utilizzare questi attributi CSS all'interno del vostro file CSS come:

#theDiv 
{ 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
3

Ho semplicemente rimosso la selezione effettuata utilizzando il tasto Maiusc. Questo potrebbe mostrare un po 'di sfarfallio se

if (event.shiftKey) { 
    window.getSelection().removeAllRanges() 
} 
13

Solo una nota sulla risposta da Cleiton sopra - l'esempio di codice sembra funzionare bene, ma per essere un buon cittadino nel mondo jQuery, si dovrebbe restituire il jQuery oggetto al termine della funzione in modo che sia chainable - una semplice aggiunta di una riga fissa che fino:

jQuery.fn.extend({ 
    disableSelection : function() { 
      this.each(function() { 
        this.onselectstart = function() { return false; }; 
        this.unselectable = "on"; 
        jQuery(this).css('-moz-user-select', 'none'); 
      }); 
      return this; 
    } 
}); 

Cheers, spero che questo è utile.

+2

Lo fa con "return this.each (function() {..." – frontendbeauty

1

Se si dispone di jQuery UI sulle tue pagine, basta usare

$("element-selector").disableSelection(); 
+1

Questo non è documentato, ma dovrebbe funzionare se si ha jQuery UI core –

+0

la cosa buona di questa soluzione è che è applicabile anche a IE e replica la funzionalità di soluzioni già citate se si guarda il codice – sksallaj

+1

Si noti che disableSelection() è deprecato nell'interfaccia utente jQuery 1.9 – mar10

0
::-moz-selection { /* Code for Firefox */ 
    color: black; 
    background: none; 
} 

::selection { 
    color: black; 
    background: none; 
} 

da http://www.w3schools.com/cssref/sel_selection.asp
in realtà dalla sezione try-it, dopo aver cambiato i valori.
avviso che il cursore è ancora a forma di 'I' ...

+0

Nota: lo pseudo-elemento :: selection è stato elaborato per i CSS Selectors di Livello 3, ma rimosso prima dello stato della Raccomandazione. Al momento, lo pseudo-elemento :: selection non è in alcuna specifica (tuttavia, potrebbe essere aggiunto nuovamente alle future specifiche CSS). – luk2302

Problemi correlati