Select2: программный контроль заполнитель
Я хочу изменить заполнитель на элементе управления select2 при событии.
Итак, у меня есть это...
<select id="myFoo" placeholder="Fight some foo...">
..., который затем увеличивается:
init: function(){
$('#myFoo').select2();
},
... так что теперь у него есть правильный placeholder.
Но потом я хочу, чтобы он реагировал на событие и очистил местозаполнитель...
someButtonPress: function(){
// $('#myFoo').placeholder("");
// $('#myFoo').attr('placeholder', "");
// $('#myFoo').select2('placeholder',"");
// $('#myFoo').select2({placeholder:""});
// none of these work
}
Это кажется таким основным, но я в тупике.
Я не могу найти что-либо в документах. Я ищу не в том месте?
Ответы
Ответ 1
Обновление
Если вы установили placeholder с помощью атрибута data-placeholder
HTML, вам нужно изменить его, а не внутреннюю опцию, поэтому он будет выглядеть как Fabian H..
$select.attr("data-placeholder", "New placeholder text");
$select.data("select2").setPlaceholder();
Или, если нет, используйте внутреннюю опцию select2.opts.placeholder
:
var select2 = $select.data("select2");
select2.opts.placeholder = "New placeholder text";
select2.setPlaceholder();
Это не идеально, конечно, но лучше, чем взломать сгенерированный HTML2.
-
this.$select.data("select2")
получает ваш внутренний объект select2, поэтому вы получаете доступ к его свойствам и методам (не только к экспортированным для использования извне)
- Далее я обновляю внутренний параметр
placeholder
или изменяя связанный атрибут данных
- Наконец, я запускаю внутренний метод
setPlaceholder
, который устанавливает новый placeholer.
Надеюсь, что это поможет!
Ответ 2
если вы хотите динамически изменять местозаполнитель, не устанавливайте его в HTML
<select id="myFoo">
установите его на jQuery
$('#myFoo').select2({
placeholder: "your placeholder"
});
затем обновите его следующим образом
someButtonPress: function(){
$('#myFoo').select2({
placeholder: "change your placeholder"
});
}
он работает для меня, надеюсь, что это поможет.
Ответ 3
Чтобы обновить местозаполнитель Select2 с помощью удаленных данных (AJAX/JSONP), используйте этот код:
$input = $("input#e7");
$input.attr("data-placeholder", "New placeholder");
var select2 = $input.data("select2");
select2.setPlaceholder();
Кредиты на Ответ на запросы.
Ответ 4
Другой способ обновить местозаполнитель - установить атрибут "placeholder" на элементе select и снова вызвать select2():
$('#IdForSelectElement').attr('placeholder', 'New Placeholder Text').select2();
Просто помните, что если вы впервые передали какие-либо опции select2, вам нужно будет передать их снова (или просто настроить параметры по умолчанию, используя $.fn.select2.defaults).
Ответ 5
Я полагаю, что поведение будет зависеть от того, какую версию Select2 вы используете, - мы используем v3.5.1, - но мне пришлось немного по-разному подойти, чтобы заставить заполнителя меняться по требованию. В моем случае селектор меняет параметры, представленные на основе значения другого селектора, а это означает, что местозаполнитель должен измениться с новым набором данных.
Чтобы заставить это работать, мне пришлось удалить любые ссылки на placeholder в элементе ввода HTML.
<input type="text" class="form-control span10">
Затем, в Javascript, всякий раз, когда я загружал элемент с правильными параметрами, мне пришлось обновить местозаполнитель с помощью функции data()
:
selector.data('placeholder', placeholder);
selector.select2({ data: new_data_set, tags: true });
Кажется, что он работает каждый раз.
Ответ 6
Я использую Select2 4.0.5 Standard, и существующие решения либо не работают для меня, либо требуют воссоздания select2 для каждого обновления заполнителя, чего я хотел избежать.
Я придумал новое решение, даже если это взломать. Я храню контейнер select2, чтобы легко получить к нему доступ позже, а затем, когда мне нужно обновить местозаполнитель, я нахожу элемент-заполнитель в контейнере и обновляю его текст:
var selectorSelect2 = $('#selector').data('select2').$container;
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 1');
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 2');