2010-02-07 6 views
14

Tôi có một widget dijit.form.Select. Nó được gắn với một kho dữ liệu, nếu điều đó quan trọng. Nó chứa đầy một số tùy chọn rồi. Tất cả những gì tôi muốn làm là lập trình giá trị của nó. Tôi có thể lấy giá trị của nó bằng cách sử dụng myWidget.attr('value') nhưng nếu tôi cố gắng làm myWidget.attr('value', 5) ví dụ (trong đó 5 là một trong các giá trị hợp lệ), tất cả những gì cần làm là đặt lại tiện ích con để chọn tùy chọn đầu tiên, bất kể giá trị nào tôi cung cấp.Đặt giá trị (tùy chọn đã chọn) của một widget dijit.form.Select

Điều này có vẻ là một lỗi và không có bất kỳ kiểm tra hoặc tài liệu nào cho thấy cách thực hiện những gì tôi muốn. Nhưng có cách nào, ngay cả khi đó là một hack bẩn?

Tôi đang sử dụng Dojo 1.4.0. Lưu ý rằng dijit.form.Select là tên mới cho dojox.form.DropDownSelect.

chỉnh sửa: Tôi thậm chí đã thử đặt lại tiện ích với tất cả các tùy chọn mới, nhưng nó bỏ qua tùy chọn có selected = true và chỉ chọn tùy chọn đầu tiên. Vẫn còn phải có một cách mặc dù.

+0

Có một trang thử nghiệm tại đây: http://bit.ly/9qitSk mà bạn có thể gây rối. Sử dụng lỗi lửa Tôi đã sử dụng dijit.byId ('s9'). Attr ('value', 'CO') thành công trên trang đó. Điều đó sẽ đặt "dựa trên cửa hàng" Chọn trên trang đó. – jbarz

+0

@ Joe B Rất cảm ơn - Tôi đã từng thấy điều đó trước đây, nhưng không thấy ví dụ về cài đặt giá trị. Tôi đã thử làm điều đó trong firebug với widget riêng của tôi Chọn, mà không làm việc, vì vậy tôi tự hỏi những gì khác nhau ... – aehlke

+0

BTW đăng đó như là một câu trả lời và tôi sẽ upvote bạn. – aehlke

Trả lời

15

Ngay cả khi giá trị của bạn là ints, nếu bạn đặt số nguyên của bạn thành chuỗi thì thao tác này sẽ hoạt động.

dijit.byId('my_select').attr('value', String(5)); 
+0

Có cách nào để thực hiện chương trình này không? – streetlight

+0

Xin lưu ý rằng từ Dojo 2.0 attr() sẽ không hoạt động nữa. – algiogia

11

Hóa ra đó là lỗi - nếu giá trị tùy chọn không phải là chuỗi, nó sẽ không hoạt động (tôi là số nguyên).

+3

Nó thực sự là một tác dụng phụ của cách mảng/băm làm việc trong js, tôi nghĩ. nếu bạn sử dụng một int, nó sẽ nghĩ rằng bạn đang lập chỉ mục mảng, thay vì sử dụng nó như một băm. – aehlke

2

Đăng lại nhận xét của tôi: Có một trang thử nghiệm tại đây: dojo archive mà bạn có thể gây rối. Sử dụng lỗi lửa Tôi đã sử dụng dijit.byId ('s9'). Attr ('value', 'CO') thành công trên trang đó. Điều đó sẽ đặt "dựa trên cửa hàng" Chọn trên trang đó.

Nhưng như bạn đã nói tôi đặt nó bằng chuỗi và bạn đang sử dụng số nguyên nên tôi không thấy lỗi. Nắm bắt tốt.

+0

Tôi thấy chính xác cùng một sự cố (nhưng cố gắng nhấp vào một mục trong trình đơn thả xuống). Ở đây tôi đang sử dụng Dojo 1.7.3 và chắc chắn nhất là sử dụng Stringrs! :/ –