Javascript / jQuery: Đặt Giá trị (Lựa chọn) trong nhiều Lựa chọn


100

Tôi có nhiều lựa chọn:

<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>

Tôi tải dữ liệu từ cơ sở dữ liệu của mình. Sau đó, tôi có một chuỗi như thế này:

var values="Test,Prof,Off";

Làm cách nào để đặt Giá trị này trong nhiều lựa chọn? Đã thử thay đổi chuỗi trong một mảng và đặt nó dưới dạng giá trị trong bội số, nhưng không hoạt động ...! Ai đó có thể giúp tôi với điều này? CẢM ƠN!!!

Câu trả lời:


133

Lặp đi lặp lại qua vòng lặp bằng cách sử dụng giá trị trong bộ chọn động sử dụng bộ chọn thuộc tính.

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

Ví dụ làm việc http://jsfiddle.net/McddQ/1/


1
Thật tuyệt, nhưng làm thế nào để bạn nói rằng các vlaues đã chọn nên được chọn trong "nhiều lựa chọn" với id = string?
Zwen2012

@ user1824136 Tuyệt vời, Rất vui vì tôi có thể giúp ai đó vào sáng nay!
Kevin Bowersox

1
Nếu chúng ta vẫn phụ thuộc vào jQuery, thì ŁukaszW.pl sẽ thích hơn nhiều $('#strings').val(values.split(',')). Nếu không có jQuery, Plain Old Javascript ŁukaszW.pl của document.getElementById('strings').value = ["Test", "Prof", "Off"]cũng hoàn thành trong một lớp lót
KyleMit

109

trong jQuery:

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

hoặc trong JavaScript thuần túy:

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 thực hiện trừu tượng hóa đáng kể ở đây.


1
Đây hoàn hảo làm việc cho tôi và chọn 'chọn' của tôi ... phải thêm tất cả các giá trị cùng một lúc (giống như bạn nói ở trên)
Todd Vance

4
Rất tiếc, javascript thuần không hoạt động với tôi trên Chrome / mac hoặc FF / mac. Nó không ảnh hưởng đến những gì thực sự được chọn, ít nhất là những gì xuất hiện được chọn một cách trực quan trong trình duyệt.
Bill Keese

3
Nó hoạt động khi tôi truyền chuỗi, nhưng không hoạt động khi tôi truyền mảng.
Ravi G

Có cùng một vấn đề; điều này chỉ hoạt động với các giá trị chuỗi, không phải mảng (sử dụng JS thuần túy, không phải jQuery).
jayp

1
Đối với những người gặp sự cố với điều này, bạn nên đảm bảo rằng bạn kích hoạt sự kiện 'thay đổi' sau khi đặt giá trị trong JavaScript. Sử dụng jQuery, giá trị này sẽ là $ ("# string"). Val (["Test", "Prof", "Off"]). Trigger ('change');
Jon Wyatt

20

Chỉ cần cung cấp hàm jQuery val với một mảng giá trị:

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

Và để nhận các giá trị đã chọn ở cùng một định dạng:

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

8

Giải pháp JavaScript ES6 thuần túy

  • Bắt mọi tùy chọn với một querySelectorAllhàm và chia valueschuỗi.
  • Sử dụng Array#forEachđể lặp lại mọi phần tử từ valuesmảng.
  • Sử dụng Array#findđể tìm tùy chọn phù hợp với giá trị đã cho.
  • Đặt selectedthuộc tính của nó thành true.

Lưu ý : Array#frombiến đổi một đối tượng giống mảng thành một mảng và sau đó bạn có thể sử dụng các Array.prototypehàm trên nó, như tìm hoặc ánh xạ .

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

Về cơ bản, thực hiện một values.split(',')và sau đó lặp qua mảng kết quả và đặt Chọn.


1

Giải pháp JavaScript ES5 thuần túy

Vì lý do nào đó bạn không sử dụng jQuery cũng như ES6? Điều này có thể giúp bạn:

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

đây là lỗi trong một số câu trả lời cho thay thế |

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

điều chỉnh này là đúng nhưng | Cuối cùng, nó sẽ giống như thế này \ |

var mystring = "this|is|a|test";
mystring = mystring.replace(/\|/g, "");
alert(mystring);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.