2012-10-07 10 views
5

Eventuali duplicati:
Is there a way to make a DIV unselectable?Come posso fare elementi MOLTI selezionabile utilizzando jQuery o CSS?

ho visto un certo numero di soluzioni là fuori che lavoro per un elemento. Tuttavia ho un'area con etichette e pulsanti. Non è solo un elemento è ogni elemento all'interno di una DIV.

Come posso fare qualsiasi cosa contenuta all'interno di tale DIV unselectable? Si noti che non si può semplicemente mettere un livello maschera sopra il DIV come DIV ha pulsanti ho bisogno di essere in grado di fare clic.

+1

avete fatto prova a usare $ (this) .each (function() {// disabilita ciò che vuoi}); –

+2

non imposta il lavoro genitore non selezionabile? Tutti i bambini dovrebbero essere inclusi. Altro saggio try selector 'mydivclass *' – charlietfl

+0

Da quello che ho letto non selezionabile non è ereditato –

risposta

5
$(".yourdiv").children().css({userSelect: 'none'}); 

Questo è nel caso in cui si desidera disabilitare la selezione utilizzando il CSS user-select proprietà. In caso contrario, quanto sopra può essere facilmente generalizzato ad altri metodi.

È possibile che seleziona solo i figli diretti, per selezionare tutti discendenti, utilizzare il metodo .find():

$(".yourdiv").find("*").css({userSelect: 'none'}); 

si può anche fare questo usando CSS puro:

.yourdiv * { /*this selects all elements that are children of yourdiv*/ 
    /*user-select: none rules*/ 
} 

Oppure:

.yourdiv > * { /*this selects all elements that are direct descendants of yourdiv*/ 
    /*user-select: none rules*/ 
} 
+0

Grazie. Come potrei estenderlo per fare anche le altre proprietà: -webkit-user-select: none;/* Chrome/Safari */ -moz-user-select: none;/* Firefox */ -ms-user-select: none;/* IE10 + */ -o-seleziona-utente: nessuno; selezione utente: nessuna; –

+0

'$ (". Yourdiv * ")' coprirà tutti i discendenti non solo i bambini – charlietfl

+0

@SamanthaJ Le nuove versioni di jQuery aggiungono automaticamente i prefissi, se necessario. – Chris

1

I user-select variazioni CSS proprietarie sono inher in tutti i browser che li supportano. Vedere questo esempio:

http://jsfiddle.net/yD7bM/

Il tuo problema è il browser che non supportano queste proprietà CSS, vale a dire l'Opera e IE < = 9. Fortunatamente entrambe queste attuare un'alternativa: il unselectable attribute. Tuttavia, è questo attributo che non è ereditato.

La soluzione migliore consiste nel mettere un attributo unselectable="on" su ogni elemento da rendere non selezionabile nell'HTML (ad esempio, lato server). Tuttavia, se questo non è un'opzione, è possibile farlo utilizzando JavaScript utilizzando a recursive function.

Se stai usando jQuery si potrebbe fare qualcosa di simile per aggiungere l'attributo unselectable ad ogni elemento con classe "selezionabile" e tutti i suoi discendenti:

$(".unselectable").find("*").andSelf().attr("unselectable", "on"); 

Demo: http://jsbin.com/ulazic/2

+0

Può, per favore, indicare qualsiasi documentazione sull'attributo 'unselectable'? – Pavlo

+0

@Pavlo: certo. Fatto. –

+0

Uhh, che dire del supporto del browser? – Pavlo

Problemi correlati