2013-02-22 12 views
15

La documentazione è terribile o mi manca qualcosa. Sto cercando di aggiungere una classe di errore a una casella di selezione2 per la convalida del modulo. È solo un bordo rosso 1px.Aggiungi classe all'elemento select2

Ho trovato il metodo containerCssClass nella documentazione, ma non sono sicuro di come applicarlo.

Ho provato quanto segue senza fortuna:

$("#myBox").select2().containerCssClass('error'); 

risposta

21

jQuery utilizza oggetti JSON per inizializzare, quindi credo che questo sarà così: \

$("#myBox").select2({ containerCssClass : "error" }); 

Se si desidera aggiungere/rimuovere una classe è possibile farlo dopo averlo inizializzato

$($("#myBox").select2("container")).addClass("error"); 
$($("#myBox").select2("container")).removeClass("error"); 

La funzione sopra riportata ottiene il nodo DOM del cono principale TAINER di select2 es .: $("#myBox").select2("container")

Importante
Sarà necessario utilizzare il metodo del contenitore per ottenere il contenitore dal momento che non modificare il SELEZIONA direttamente, ma select2 genererà altra HTML per simulare un SELECT che è stylable.

+0

Il tuo primo suggerimento non ha funzionato per me.Per il secondo, se nella pagina sono presenti più selezioni con una singola classe, è necessario scorrere tutte le voci per aggiungere a ciascuna di esse la classe necessaria. Facendo '$ ($ (". Myclass "). Select2 (" container ")). AddClass (" error ")' non funzionerà. – machineaddict

+1

Nota che devi usare la versione completa: https://github.com/select2/select2/issues/3302 – user1063287

+1

Ricevo 'Uncaught TypeError: Impossibile leggere la proprietà 'apply' di undefined' per il secondo uso solo per' $ ('#myBox'). select2 ('container') ' – Jared

8

In base allo documentation, containerCssClass è solo una proprietà del costruttore. La migliore probabilmente stai andando ad essere in grado di fare è reinizializzare quando si ottiene un errore tramite:

$("#myBox").select2({ 
    containerCssClass: "error" 
}); 

nota dai commenti: Se si ottiene errore non rilevato: No select2/compat/containerCss (...) , è necessario includere la versione select2.full.js invece della base uno

+1

Grazie per aver suggerito di aggiungere select2.full.js – Shiv

+0

@Samsquanch Dove posso scaricare la versione completa? Non riesco a trovarlo. –

+0

Nvmd, ho scaricato da Nuget che era fondamentalmente legacy –

0

È possibile utilizzare dropdownCssClass opiton

$("#myBox").select2({ 
    containerCssClass: "error" 
}); 
1

modo più semplice:

Creare una classe genitore come

<div class="select-error"> 
    <select id="select2" name="select2" data-required class="form-control"> 
     <option value="" selected>No selected</option> 
     <option value="1">First</option> 
     <option value="2">Second</option> 
    </select> 
</div> 

quando si convalida con jQuery o PHP basta aggiungere stile o CSS per .SELECT errori di classe come

style="border:1px solid red; border-radius: 4px" 

jQuery esempio:

$('[data-required]').each(function() { 
    if (!$(this).val()) { 
    if ($(this).data('select2')) { 
     $('.select-error').css({ 
     'border': '1px solid red', 
     'border-radius': '4px' 
     }); 
    } 
    }); 
+0

Pur non rispondendo esattamente alla domanda, sono abbastanza sicuro di ciò che la maggior parte degli spettatori ha effettivamente bisogno di – Vincent

+0

Ma se avessi 2 selezioni diverse questo influenzerà anche la seconda selezione e cambiarlo al bordo rosso – user3548161

11

Per elemento select2 già inizializzato ho provato la soluzione @Niels ma ha provocato un errore: Uncaught TypeError: Cannot read property 'apply' of undefined

entrò nella sorgente e questo ha lavorato invece:

$($('#myBox').data('select2').$container).addClass('error') 
$($('#myBox').data('select2').$container).removeClass('error') 

Utilizzando select2 v4.0.3 pieno

+0

L'unico approccio che ha funzionato per me. – Fernando

+0

Funziona, ma il $ principale (...) è ridondante perché $ container è già un elemento jquery –

+0

Grazie, la tua soluzione mi ha salvato la vita – vietnguyen09

3

opzione Utilizza tema.

$(".select").select2({ 
     placeholder: "", 
     allowClear: false, 
     theme: "custom-option-select" 
    }); 
+0

sì questa è quella giusta –