2009-10-15 34 views
41

Tôi hiện đang sử dụng jQuery để trả về một số kết quả JSON. Khi các kết quả này được trả về, tôi sẽ sử dụng chúng để điền trước các trường trong biểu mẫu của tôi.jQuery/Programmatically Chọn một tùy chọn trong hộp chọn

Tuy nhiên, tôi cần một số trợ giúp trong việc chọn trước các mục trong hộp thả xuống. Ví dụ, tôi có một hộp chọn (điều này được rút ngắn):

<select id="startTime"> 
<option value="14:00:00">2:00 pm</option> 
<option value="15:00:00">3:00 pm</option> 
<option value="16:00:00">4:00 pm</option> 
<option value="17:00:00">5:00 pm</option> 
<option value="18:00:00">6:00 pm</option> 
</select> 

Và nếu giá trị JSON của tôi là:

var start_time = data[0].start // Let's say this is '17:00:00' 

Làm thế nào tôi có thể sử dụng jQuery, hãy lựa chọn với giá trị '17: 00:00 'được chọn?

<option value="17:00:00" selected="selected">5:00 pm</option> 
+1

jQuery 1.9 thay đổi này từ .attr() để .prop(). Tôi đã cung cấp câu trả lời được cập nhật bên dưới. – Joshua

Trả lời

69

update:

Tính đến jQuery 1.9, jQuery đã cập nhật thay đổi chức năng này. Trạng thái "được chọn" của một tùy chọn thực sự là một thuộc tính, do đó jQuery đã thay đổi điều này để sử dụng phương thức .prop(). Cú pháp là rất giống nhau và dễ dàng chuyển đổi:

$('#startTime option[value=17:00:00]').prop('selected', true); 

Xem http://api.jquery.com/prop/#entry-longdesc cho lý do tại sao nó cần phải vượt qua true.


Cũ hơn jQuery

$('#startTime option[value=17:00:00]').attr('selected', 'selected'); 

hoặc

$('#startTime option[value='+ data[0].start +']').attr('selected', 'selected'); 
+11

Câu trả lời hay. Tôi cũng có thể khuyên bạn nên kế toán cho hộp lựa chọn như vậy: $ ('# mySelect option [value = "17:00:00"]'). Attr ('selected', 'selected'); – Volomike

+0

Mã này hoạt động hoàn hảo khi JSON là một từ, nhưng khi nó có một khoảng trống trong nó (hai từ) nó phá vỡ ... bất kỳ ý tưởng nào? $ ('# selSource option [value =' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + ']') attr ('đã chọn', 'đã chọn'); – user1431633

+0

cần thiết để bao quanh nó với dấu ngoặc kép ... $ ('# selSource option [value = \ "' + obj.DATA [0] [obj.COLUMNS.indexOf ('SOURCE')] + '\"]'). attr ('đã chọn', 'đã chọn'); – user1431633

30
$('#startTime').val(start_time); 
+4

Điều này cần phải là câu trả lời được chấp nhận.Tôi không hiểu mục đích của việc phải đánh hơi qua Dom, thực hiện các thao tác chuỗi có thể, và cuối cùng thiết lập giá trị thuộc tính. Chỉ cần thay đổi giá trị của hộp chọn trừ khi tôi bỏ lỡ điều gì đó .. – calcazar

9

Nó chỉ $("#startTime").val(start_time);

1

Đối với một số lý do đối với tôi nó hoạt động như thế này:

$('#startTime').val(''+data[0].start+''); 
+1

Tôi tin rằng đó là tương đương với chạy '$ ('# startTime'). Val (toString (dữ liệu [0] .bắt đầu))' – thekingoftruth

9

CẬP NHẬT

Kể từ jQuery 1.9, jQuery đã cập nhật đã thay đổi chức năng này. Trạng thái "được chọn" của một tùy chọn thực sự là một thuộc tính, do đó jQuery đã thay đổi điều này để sử dụng phương thức .prop(). Cú pháp là rất giống nhau và dễ dàng chuyển đổi:

$('option[value=17:00:00]').prop('selected', 'selected'); 
+0

Điều này vừa giải quyết được một vấn đề lớn mà tôi chỉ gặp trong Firefox và Safari. Chrome và IE8 hoạt động như mong đợi với '.attr()', nhưng những người khác đã phá vỡ. – krillgar

2

Thông tin bổ sung cho jquery người dùng di động (1.3.0):

Dưới đây là một similar example.

Nếu bạn cố gắng ví dụ trên với jquery 1.9.1 và 1.3.0 jquery mobile bạn có thể thấy rằng nó không làm việc trừ khi bạn thêm một

$("#location_list").selectmenu("refresh"); 

Giữ ý nghĩ đó khi làm việc với jquery di động. Nó đã cho tôi rất nhiều đau đầu

1
var varValue="17:00:00"; 
$("#startTime").ready(function(){ 
    $("#startTime option[value='"+varValue+"']").prop("selected", "selected"); }); 

trình cho tôi về jQuery 1.10

Các vấn đề liên quan