Выбор2: праграмна кіравання запаўняльнікам

Я хачу, каб змяніць запаўняльнік на кантроль узмацнення ВЫБ.2 пасля падзеі.

Так што ў мяне ёсць гэта ...

11
Я прадставіў білет на гэта: github.com/ivaynberg/select2/issues/2807</а>
дададзена аўтар mpen, крыніца
вы спрабавалі выдалення запаўняльнік з вашага HTML і ўсталяваць яго з дапамогай $ ( «# MYFOO»). Выбор2 ( «запаўняльнік», «Байцоўскі некаторыя Foo ...») , то вы можаце быць у стане ачысціць яго з той жа функцыяй
дададзена аўтар Jake Zeitz, крыніца
Ну, што ставіць мой тэкст у JavaScript, а не ў HTML ...
дададзена аўтар DaveC426913, крыніца
Вось як я ў канчатковым выніку kludging гэта: ... $ ( '# MYFOO') бацькі (ГД ') знайсці (' a.select2-змаўчанню дыяпазон ') HTML (' '); : P
дададзена аўтар DaveC426913, крыніца

7 адказы

<�Моцны> Абнаўленне

Калі вы ўсталявалі запаўняльнік праз 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();

Гэта не ідэальна, вядома, але лепш, чым ўзлом ВЫБ.2 генеруецца HTML.

  1. this.$select.data("select2") gets you the internal select2 object, so you get access to its properties and methods (not only to those exported for use from outside)
  2. Next I'm updating the placeholder internal option or changing the related data attribute
  3. Finally I'm triggering internal method setPlaceholder that sets the new placeholer.

Надзея, што дапамагае!

10
дададзена
Для метаду ўнутранага абнаўлення варыянт, хоць пасланай адказ меркавана працуе на аднаслаёвыя абярыце элементы кіравання, але яна не працуе для майго множнага выбару кіравання (прынамсі, з Select2 3.3.x). Для таго, каб зрабіць гэта для множнага выбару версіі, я сканчаў неабходнасці выклікаць select2.clearSearch() замест select2.setPlaceholder() .
дададзена аўтар Scott Dudley, крыніца

калі вы хочаце, каб дынамічна змяняць запаўняльнік, не ўстанаўлівайце яго на HTML

6
дададзена

Каб абнавіць запаўняльнік з больш выбор2 з выдаленымі дадзенымі (AJAX/JSONP), выкарыстоўвайце гэты код:

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

Крэдыты Brocks адказ .

4
дададзена
Аказалася, мой варыянт тонкай налады не працуе для HTML паказана запаўняльнікаў, дзякуй за ваш уклад.
дададзена аўтар Brock, крыніца

Іншы спосаб абнавіць запаўняльнік, каб усталяваць «запаўняльнік» атрыбут выбару элемента і выклічце ВЫБ.2() яшчэ раз:

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

Толькі памятайце, што калі вы прайшлі якія-небудзь варыянты ВЫБ.2 ў першы раз, вам трэба будзе прайсці іх зноў (ці проста наладзіць параметры па змаўчанні, выкарыстоўваючы $ .fn.select2.defaults).

2
дададзена

Я выкарыстоўваю Select2 4.0.5 Standard і існуючыя рашэння альбо не працуе для мяне ці патрабуецца аднаўленне ВЫБ.2 для кожнага абнаўлення запаўняльнікам, які я хацеў бы пазбегнуць.

Я прыдумаў новае рашэнне, нават калі гэта хак. Ахалоджвайце кантэйнер ВЫБ.2 лёгка атрымаць доступ да яго пазней, а затым, калі мне трэба абнавіць запаўняльнік я знайсці элемент-запаўняльнік ўнутры кантэйнера і абнавіць яго тэкст:

var selectorSelect2 = $('#selector').data('select2').$container;
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 1');
...
selectorSelect2.find('.select2-selection__placeholder').text('Updated Text 2');
1
дададзена
Гэта не працуе для мяне па нейкай прычыне.
дададзена аўтар SearchForKnowledge, крыніца
@SearchForKnowledge Не маглі б вы даць больш падрабязную інфармацыю і jsfiddle?
дададзена аўтар Gavin.Paolucci.Kleinow, крыніца

Я лічу, што паводзіны будзе залежаць ад таго, якой версіі выбор2 вы карыстаецеся - мы выкарыстоўваем v3.5.1 - але я павінен быў узяць некалькі іншы падыход, каб атрымаць запаўняльнік для змены па патрабаванні. У маім выпадку, селектар змяняе параметры, прадстаўленыя на аснове значэння іншага выбару, што азначае, што запаўняльнік павінен змяніцца з новым наборам дадзеных.

Для таго, каб атрымаць гэтую працу, мне давялося выдаліць усе спасылкі на запаўняльнік ў HTML элеменце ўводу.

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

Тады, у Javascript, кожны раз, калі я загрузіў элемент з патрэбнымі параметрамі, я павінен быў абнавіць запаўняльнік праз дадзеныя() функцыі:

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

Гэта падобна на працу кожны раз, калі ў цяперашні час.

0
дададзена

Калі вы таксама змяненне параметраў дынамічна, вам неабходна ан-чаргу дадатковага пусты параметру для запаўняльніка ўступіў у сілу. Напрыклад:

response.unshift({id: '', text: ''});
$('#elem).select2({placeholder: 'Select..', data: response}); 
0
дададзена