2013-02-22 5 views
15

Die Dokumentation ist entweder schrecklich oder mir fehlt etwas. Ich versuche, eine select2-Box eine Fehlerklasse für die Formularüberprüfung hinzuzufügen. Es ist nur ein 1px roter Rand.Klasse zu select2 Element hinzufügen

Ich fand die containerCssClass Methode in der Dokumentation, aber ich bin mir nicht sicher, wie man es anwendet.

Ich habe versucht, die folgenden ohne Glück:

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

Antwort

21

jQuery verwendet Objekte JSON zu initialisieren, so dass ich denke, das wird man auch: \

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

Wenn Sie hinzufügen möchten/entfernen Sie eine Klasse, die Sie tun können, nachdem Sie es initialisiert haben

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

Die obige Funktion ruft den DOM-Knoten des Hauptcontrollers ab Tainer von select2 z.B .: $("#myBox").select2("container")

Wichtige
Sie müssen die Container-Methode verwenden, um den Behälter zu erhalten, da Sie nicht direkt bearbeiten die SELECT aber select2 werden andere HTML erzeugen eine SELECT zu simulieren, die frisierbar ist.

+0

Ihr erster Vorschlag funktionierte nicht für mich.Wenn Sie auf der zweiten Seite mehrere Selects auf der Seite mit einer einzelnen Klasse haben, müssen Sie alle durchlaufen, um jeder Klasse die gewünschte Klasse hinzuzufügen. Doing '$ ($ (". Myclass "). Select2 (" container ")). AddClass (" error ")' wird nicht funktionieren. – machineaddict

+1

Beachten Sie, dass Sie die Vollversion verwenden müssen: https://github.com/select2/select2/issues/3302 – user1063287

+1

Ich bekomme 'Uncaught TypeError: Eigenschaft kann nicht gelesen werden 'apply' von undefined' für die zweite Verwendung nur für' $ ('#myBox'). select2 ('container') ' – Jared

8

Nach der documentation ist containerCssClass nur eine Konstruktoreigenschaft. Das Beste, was Sie sind wahrscheinlich, es zu tun in der Lage sein wird neu initialisiert, wenn Sie einen Fehler über erhalten:

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

Hinweis von Kommentaren: Wenn Sie nicht erfasste Fehler erhalten: Nein select2/compat/containerCss (...) , müssen Sie die select2.full.js Version anstelle der Grund ein

+1

Danke für das Hinzufügen von select2.full.js – Shiv

+0

@Samsquanch Wo kann ich die Vollversion herunterladen? Ich kann es nicht finden. –

+0

Nvmd, ich heruntergeladen von Nuget, die im Grunde Legacy war –

0

Sie können dropdownCssClass opiton

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

der einfachste Weg umfassen:

Erstellen einer übergeordneten Klasse wie

<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> 

, wenn Sie es mit jquery oder PHP zu validieren nur Stil oder CSS in den .select-Fehlerklasse wie

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

jQuery Beispiel:

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

Während ich die Frage nicht genau beantworten, bin ich mir ziemlich sicher, dass die Mehrheit der Zuschauer tatsächlich brauchen – Vincent

+0

Aber was ist, wenn ich 2 verschiedene Auswahlmöglichkeiten dies auch Auswirkungen auf die zweite Auswahl und ändere es zum roten Rand – user3548161

11

Für bereits initialisiertes select2-Element habe ich @Niels Lösung ausprobiert, aber es führte zu einem Fehler: Uncaught TypeError: Cannot read property 'apply' of undefined

ging in die Quelle und diese stattdessen gearbeitet hat:

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

Mit select2 V4.0.3 voll

+0

Der einzige Ansatz, der für mich arbeitete. – Fernando

+0

Das funktioniert, aber das führende $ (...) ist überflüssig, weil $ container bereits ein jquery-Element ist –

+0

Danke, Ihre Lösung rettet mein Leben – vietnguyen09

3

Verwendung Thema Option.

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

yeah das ist die richtige –