Javascript / jQuery : 다중 선택에서 값 설정 (선택)


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 = string 인 "multiple select"에서 선택되어야한다고 어떻게 말합니까?
Zwen2012 2013 년

@ user1824136 훌륭합니다. 오늘 아침 누군가를 도울 수있어서 다행입니다!
Kevin Bowersox 2013 년

1
어쨌든 jQuery에 의존하려면 ŁukaszW.pl을 선호합니다 $('#strings').val(values.split(',')). jQuery를하지 않고, ŁukaszW.pl의 일반 올드 자바 스크립트는 document.getElementById('strings').value = ["Test", "Prof", "Off"]또한 한 줄에서 수행
KyleMit

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
(위의 말처럼) 일단 저와 '선택'선택에 대한이 가공 한 완벽 ... 모든 값을 추가 할 필요가
토드 밴스에게

4
흠, 순수한 자바 스크립트는 Chrome / mac 또는 FF / mac에서 작동하지 않습니다. 실제로 선택된 항목에는 영향을 미치지 않으며, 적어도 브라우저에서 시각적으로 선택된 항목에는 영향을주지 않습니다.
Bill Keese 2014

3
문자열을 전달할 때 작동하지만 배열을 전달할 때는 작동하지 않습니다.
Ravi G

같은 문제가 있습니다. 이것은 배열이 아닌 문자열 값으로 만 작동합니다 (jQuery가 아닌 일반 JS 사용).
jayp

1
이 문제가 발생하는 경우 JavaScript에서 값을 설정 한 후 '변경'이벤트를 트리거해야합니다. jQuery를 사용하면 $ ( "# strings"). val ([ "Test", "Prof", "Off"]). trigger ( 'change');
Jon Wyatt의

20

값 배열과 함께 jQuery val 함수를 제공하십시오.

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

선택한 값을 동일한 형식으로 가져 오려면 다음을 수행하십시오.

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

8

순수 JavaScript ES6 솔루션

  • querySelectorAll함수로 모든 옵션을 포착하고values 문자열을 합니다.
  • 사용 Array#forEach로부터 모든 요소를 반복하는values배열의 .
  • 사용하다 Array#find주어진 값과 일치하는 옵션을 찾는 데 합니다.
  • selected속성을로 설정하십시오 true.

참고 : 배열과 유사한 객체를 배열로Array#from 변환 한 다음 find 또는 map 과 같은 함수 를 사용할 수 있습니다 .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(',')다음 결과 배열을 반복하고 선택을 설정하십시오.


1

순수 JavaScript ES5 솔루션

어떤 이유로 당신은 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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.