Javascript / jQuery: Встановлення значень (Selection) у декількох Select


100

У мене є вибір:

<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>

Я завантажую дані зі своєї бази даних. Тоді у мене є такий рядок:

var values="Test,Prof,Off";

Як я можу встановити ці значення у кратному виборі? Вже спробував змінити рядок у масиві та поставити його як значення у множині, але це не працює ...! Хтось може мені допомогти у цьому? ДЯКУЮ!!!

Відповіді:


133

Ітерація через цикл, використовуючи значення в динамічному селекторі, що використовує селектор атрибутів.

var values="Test,Prof,Off";
$.each(values.split(","), function(i,e){
    $("#strings option[value='" + e + "']").prop("selected", true);
});

Приклад роботи http://jsfiddle.net/McddQ/1/


1
Це здорово, але як ви можете сказати, що вибрані vlaues слід вибирати у "кратному виділенні" за допомогою рядка id =?
Zwen2012

@ user1824136 Відмінно, рада, що я могла допомогти комусь сьогодні вранці!
Кевін Боуерсокс

1
Якщо ми все одно залежатимемо від jQuery, то віддаємо перевагу ŁukaszW.pl $('#strings').val(values.split(',')). Без jQuery, Plain Old Javascript document.getElementById('strings').value = ["Test", "Prof", "Off"]також виконує
aukaszW.pl

109

в jQuery:

$("#strings").val(["Test", "Prof", "Off"]);

або в чистому JavaScript:

var element = document.getElementById('strings');
var values = ["Test", "Prof", "Off"];
for (var i = 0; i < element.options.length; i++) {
    element.options[i].selected = values.indexOf(element.options[i].value) >= 0;
}

jQuery робить тут значну абстракцію.


1
Це спрацювало ідеально для мене, і мої "вибрані" вибирають ... повинні додати всі значення одразу (так само, як ви сказали вище)
Todd Vance

4
Хм, чистий JavaScript не працює для мене на Chrome / mac або FF / mac. Це не впливає на те, що насправді вибрано, принаймні те, що візуально відображається в браузері.
Білл Кіз

3
Він працює, коли я передаю рядок, але не тоді, коли я передаю масив.
Раві Г

Маючи те саме питання; це працює лише зі значеннями рядків, а не з масивами (використовуючи звичайний JS, а не jQuery).
jayp

1
Для тих, хто має проблеми з цим, переконайтеся, що ви запустили подію "зміни" після встановлення значення в JavaScript. Використовуючи jQuery, це буде $ ("# рядки"). Val (["Тест", "Проф", "Вимкнено"]). Тригер ("зміни");
Джон Віатт

20

Просто надайте функції jQuery val масив значень:

var values = "Test,Prof,Off";
$('#strings').val(values.split(','));

І щоб отримати вибрані значення в тому самому форматі:

values = $('#strings').val();

8

Чисте рішення ES6 JavaScript

  • Ловіть кожен варіант за допомогою querySelectorAllфункції та розділітьvalues рядок.
  • Використовуйте Array#forEachдля повторення кожного елемента зvalues масиву.
  • Використовуйте Array#find для пошуку параметра, що відповідає заданому значенню.
  • Встановіть його selectedатрибут true.

Примітка : Array#fromперетворює масив, схожий на масив, в масив, і тоді ви можете використовувати Array.prototypeна ньому функції, як знайти або зіставити .

var values = "Test,Prof,Off",
    options = Array.from(document.querySelectorAll('#strings option'));

values.split(',').forEach(function(v) {
  options.find(c => c.value == v).selected = true;
});
<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>


2

В основному зробіть a, values.split(',')а потім проведіть цикл через отриманий масив і встановіть Select.


1

Чисте рішення ES5 JavaScript

Чомусь ви не використовуєте jQuery і ES6? Це може допомогти вам:

var values = "Test,Prof,Off";
var splitValues = values.split(',');
var multi = document.getElementById('strings');

multi.value = null; // Reset pre-selected options (just in case)
var multiLen = multi.options.length;
for (var i = 0; i < multiLen; i++) {
  if (splitValues.indexOf(multi.options[i].value) >= 0) {
    multi.options[i].selected = true;
  }
}
<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On" selected>On</option>
</select>


0
var groups = ["Test", "Prof","Off"];

    $('#fruits option').filter(function() {
      return groups.indexOf($(this).text()) > -1; //Options text exists in array
    }).prop('selected', true); //Set selected

0

це помилка в деяких відповідях на заміну |

var mystring = "this|is|a|test";
mystring = mystring.replace(/|/g, "");
alert(mystring);

ця корекція правильна, але | Зрештою, це має виглядати так \ |

var mystring = "this|is|a|test";
mystring = mystring.replace(/\|/g, "");
alert(mystring);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.