2013-02-22 32 views
15

Dokumentacja jest albo straszna, albo czegoś brakuje. Próbuję dodać klasę błędów do pola select2 do sprawdzania poprawności formularza. To tylko czerwona krawędź 1px.Dodaj klasę do select2 element

Znalazłem metodę containerCssClass w dokumentacji, ale nie jestem pewien, jak ją zastosować.

Próbowałem następujących bez powodzenia:

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

Odpowiedz

21

jQuery wykorzystuje obiekty JSON zainicjować, więc myślę, że ten będzie również: \

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

Jeśli chcesz dodać/usunąć klasę można to zrobić po jej

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

zainicjowany Powyższa funkcja dostaje węzeł DOM głównego con tainer z select2 np .: $("#myBox").select2("container")

Ważne
Trzeba będzie użyć metody pojemnika, aby uzyskać pojemnik, ponieważ nie będzie edytować bezpośrednio wybrać ale select2 generuje inny kod HTML do symulacji SELECT, która jest łatwym do układania.

+0

Twoja pierwsza sugestia nie zadziałała dla mnie.Jeśli chodzi o drugi, jeśli masz kilka wyborów na stronie z jedną klasą, musisz powtórzyć wszystkie, aby dodać do każdej z nich klasę, której potrzebujesz. Wykonywanie '$ ($ (" .myclass "). Select2 (" container ")). AddClass (" error ")' nie zadziała. – machineaddict

+1

Pamiętaj, że musisz użyć pełnej wersji: https://github.com/select2/select2/issues/3302 – user1063287

+1

Otrzymuję komunikat "Uncaught TypeError: Nie mogę odczytać właściwości 'apply' of undefined' dla drugiego użycia tylko dla' $ ('#myBox'). select2 ('container') ' – Jared

8

Zgodnie z documentation, containerCssClass jest tylko właściwością konstruktora. Najlepszym jesteś prawdopodobnie będzie w stanie zrobić to ponownie zainicjować go, gdy pojawi się błąd poprzez:

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

nocie z uwag: Jeśli masz Uncaught Błąd: Nie select2/compat/containerCss (...) , trzeba podać wersję select2.full.js zamiast podstawowego jednej

+1

Dzięki za sugestię, aby dodać select2.full.js – Shiv

+0

@Samsquanch Skąd pobrać pełną wersję? Nie mogę tego znaleźć. –

+0

Nvmd, ściągnąłem z Nuget, który był po prostu spuścizną –

0

można użyć dropdownCssClass opiton

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

Najłatwiej:

Utwórz klasę nadrzędną jak

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

podczas sprawdzania go z jquery lub php wystarczy dodać styl lub css do .Wybrać błędów klasa jak

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

jQuery przykład:

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

Nie odpowiadając dokładnie na pytanie, jestem prawie pewien, że to, co większość widzów faktycznie potrzebuje – Vincent

+0

Ale co jeśli mam 2 różne selekcje to wpłynie to również na drugi wybór i zmień go na czerwoną granicę – user3548161

11

Dla już zainicjowanego elementu select2 wypróbowałem rozwiązanie @Niels, ale spowodowało to błąd: Uncaught TypeError: Cannot read property 'apply' of undefined

poszedł do źródła i to działa zamiast:

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

Korzystanie select2 v4.0.3

+0

Jedyne podejście, które zadziałało dla mnie. – Fernando

+0

To działa, ale wiodące $ (...) jest zbędne, ponieważ $ container jest już elementem jquery –

+0

Dzięki, twoje rozwiązanie uratuje moje życie – vietnguyen09

3

opcja wykorzystanie motywu pełny.

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

tak, to jest poprawne –

Powiązane problemy