2013-06-03 12 views
11

Chcę zmienić obiekt zastępczy na kontroli wzmocnienia select2 po zdarzeniu.select2: programowo kontrolujący obiekt zastępczy

Więc mam to ...

<select id="myFoo" placeholder="Fight some foo..."> 

... który jest następnie wzmocniony:

init: function(){ 
    $('#myFoo').select2(); 
}, 

... więc teraz ma swoją prawidłową zastępczy.

Ale chcę go do reagowania na zdarzenia i wyczyścić zastępczy ...

someButtonPress: function(){ 
// $('#myFoo').placeholder(""); 
// $('#myFoo').attr('placeholder', ""); 
// $('#myFoo').select2('placeholder',""); 
// $('#myFoo').select2({placeholder:""}); 
// none of these work 
} 

To wydaje się tak prosty, ale jestem zakłopotany.

Nie mogę znaleźć niczego w dokumentach. Czy szukam w niewłaściwym miejscu?

+1

próbowałeś usuwania zastępczy z html i ustawienie go z '$ ('# myFoo'). select2 ('placeholder'," Fight some foo ... ") '', wtedy możesz być w stanie wyczyścić go z tą samą funkcją –

+0

Cóż, to umieszcza mój tekst w JavaScript, zamiast tego w HTML ... – DaveC426913

+2

Oto jak to zrobiłem: $ ('# myFoo'). rodzice ('td'). find ('a.select2-default span'). html (''); : P – DaveC426913

Odpowiedz

2

Innym sposobem, aby zaktualizować zastępczy jest ustawienie „zastępczy” atrybut select elementu, i nazywają select2() ponownie:

$('#IdForSelectElement').attr('placeholder', 'New Placeholder Text').select2(); 

Wystarczy pamiętać, że jeśli przeszły wszelkie opcje select2 po raz pierwszy , będziesz musiał przekazać je ponownie (lub po prostu ustawić domyślne opcje za pomocą $ .fn.select2.defaults).

10

Aktualizacja

Jeśli ustawiony zastępczy poprzez HTML data-placeholder atrybutu, trzeba go zmienić, a nie opcja wewnętrzny, więc będzie to wyglądało jak Fabian H. proponuje:

$select.attr("data-placeholder", "New placeholder text"); 
$select.data("select2").setPlaceholder(); 

Lub jeśli nie, użyj opcji wewnętrznej: select2.opts.placeholder:

var select2 = $select.data("select2"); 
select2.opts.placeholder = "New placeholder text"; 
select2.setPlaceholder(); 

To nie jest oczywiście perfekcyjnie, ale znacznie lepiej niż hackowanie generowanego HTML select2.

  1. this.$select.data("select2") dostaje wewnętrznego obiektu select2, więc można uzyskać dostęp do jego właściwości i metod (nie tylko dla tych, eksportowane do użytku z zewnątrz)
  2. Następny ja aktualizowania opcję wewnętrznego placeholder lub zmianę powiązany atrybut danych
  3. W końcu uruchamiam wewnętrzną metodę setPlaceholder, która ustawia nowego placeholera.

Mam nadzieję, że pomoże!

+0

Dla wewnętrznej metody aktualizacji opcji, chociaż wysłana odpowiedź prawdopodobnie działa dla pojedynczego wyboru kontroli, ale to nie zadziałało dla mojej kontroli wielokrotnego wyboru (przynajmniej z Select2 3.3.x). Aby zrobić to dla wersji multi-select, musiałem wywołać 'select2.clearSearch()' zamiast 'select2.setPlaceholder()'. –

4

Aby zaktualizować zastępczy o Select2 ze zdalnych danych (AJAX/jsonp) użyć tego kodu:

$input = $("input#e7"); 
$input.attr("data-placeholder", "New placeholder"); 
var select2 = $input.data("select2"); 
select2.setPlaceholder(); 

kredytów Brocks response.

+1

Okazało się, że modyfikacja opcji nie działa dla haseł określonych przez html, dzięki za twoje dane wejściowe. – Brock

6

jeśli chcesz dynamicznie zmieniać zastępczy, nie należy ustawiać go na HTML

<select id="myFoo"> 

ustawić go na jQuery

$('#myFoo').select2({ 
    placeholder: "your placeholder" 
}); 

następnie zaktualizować go jak ten

someButtonPress: function(){ 
$('#myFoo').select2({ 
    placeholder: "change your placeholder" 
    }); 
} 

to działa dla mnie, mam nadzieję, że pomaga.

0

Uważam, że zachowanie będzie zależało od używanej wersji Select2 - używamy v3.5.1 - ale musiałem przyjąć nieco inne podejście, aby zmiennik zastępczy zmienić na żądanie. W moim przypadku selektor zmienia opcje przedstawione na podstawie wartości innego selektora, co oznacza, że ​​symbol zastępczy musi zostać zmieniony przy użyciu nowego zestawu danych.

Aby to działało, musiałem usunąć wszelkie odniesienia do elementu zastępczego w elemencie wejściowym HTML.

<input type="text" class="form-control span10"> 

Następnie w JavaScript, ilekroć ładowany element z odpowiednimi opcjami, musiałem zaktualizować zastępczy za pośrednictwem funkcji data():

selector.data('placeholder', placeholder); 
selector.select2({ data: new_data_set, tags: true }); 

, który wydaje się działać za każdym razem, teraz.

0

Używam Select2 4.0.5 Standard i istniejące rozwiązania albo nie działały dla mnie, albo wymagały odtworzenia selekcji2 dla każdej aktualizacji zastępczej, której chciałem uniknąć.

Wymyśliłem nowe rozwiązanie, nawet jeśli jest to włamanie. Przechowywać pojemnik select2 łatwy dostęp później, wtedy kiedy trzeba aktualizować zastępczy znajdę element zastępczy w pojemniku i aktualizować swój tekst:

var selectorSelect2 = $('#selector').data('select2').$container; 
... 
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 1'); 
... 
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 2'); 
+0

To nie działa dla mnie z jakiegoś powodu. – SearchForKnowledge

Powiązane problemy