2009-10-08 41 views
14

Tôi có một hộp chọn:Lấy giá trị của một hộp SELECT trong Internet Explorer

<select id="item1" name="Item 1"> 
    <option> </option> 
    <option> Camera </option> 
    <option> Microphone </option> 
    <option> Tripod </option> 
</select> 

Và tôi có JavaScript này:

var item1= document.getElementById("item1").value; 

item1 luôn thấy trống rỗng, không bao giờ là lựa chọn được chọn. Tuy nhiên, điều này hoạt động trong .

Trả lời

23

Sử dụng item.value hoạt động cho tất cả các trình duyệt ngoại trừ các trình duyệt rất cũ (Netscape 4 bất kỳ ai?). Lý do nó không hoạt động trong trường hợp này là vì bạn không có thuộc tính value trong các tùy chọn. Bạn nên khai báo giá trị cho mỗi thuộc tính. Những gì bạn hiện có chỉ là "văn bản" tài sản, mà thông thường mặc định để giá trị bất cứ khi nào không có giá trị được khai báo. Cách khác, bạn có thể đẩy một số mã trong sự kiện tải cửa sổ để làm cho "giá trị" của mỗi tùy chọn này giống như "văn bản".

Một cách thứ ba bạn có thể sử dụng mã dưới đây, mà là cách old-fashioned:

var s = document.getElementById('item1'); 
var item1 = s.options[s.selectedIndex].value; 
+0

oops, điều này không hoạt động trong IE 6, nhưng không trong IE 8: ( – bmw0128

+0

Nên làm việc tốt trong IE6 - bạn có lỗi gì? – Greg

+1

không có lỗi cho mỗi se, tôi có một kiểm tra cho một giá trị, và giá trị là không bao giờ có – bmw0128

3

Là một phụ lục để trả lời # 1, cẩn thận như < chọn> .selectedIndex có thể -1 số thời gian sẽ ném một ngoại lệ khi được chuyển vào < chọn> .options [n]. Như vậy, bạn có thể muốn làm làm một thử nghiệm nhanh:

var s = document.getElementById('item1'); 
var item = (-1 != s.selectedIndex)? 
       s.options[s.selectedIndex] : null; 

EDIT

bình luận

mỗi Tim, s.selectedIndex thể là -1 nếu bạn thiết lập nó qua JavaScript hoặc bạn tạo ra một sản phẩm nào < chọn > hộp.

+0

Bạn có biết khi nào 'selectIndex' có thể là -1 không? Tôi chưa bao giờ thấy điều đó. –

+0

Cách duy nhất 'selectIndex' có thể là -1 là nếu bạn đã explictly đặt nó là -1 thông qua JavaScript. –

+0

Tuy nhiên, tôi đã downvoted quá vội vàng và bây giờ tôi không thể loại bỏ nó trừ khi bạn chỉnh sửa. Lấy làm tiếc. –

14

Vì thẻ tùy chọn của bạn không có thuộc tính "giá trị" IE6 và IE7 sẽ trả lại cho bạn chuỗi trống. Bạn nên đọc giá trị từ "văn bản" lĩnh vực của đối tượng lựa chọn như thế này:

var item1 = s.options[s.selectedIndex].text; 

trong item1 bạn sẽ có giá trị mà bạn cần mà không cần phá vỡ khả năng tương thích với Firefox và IE 8.

1

Mã để nhận được một vaiable ColumnName từ hộp CHỌN gọi layerDetails.styleColumn (SELECT thẻ có cùng tên và Id), mà làm việc trên tất cả các trình duyệt ...

var columnName = document.getElementsByName('layerDetails.styleColumn')[0].value; 
if (columnName == null || columnName == '') 
    { 
    columnName = document.getElementById('layerDetails.styleColumn').value; 
    } 

if (columnName == null || columnName == '') 
    { 
    var select = document.getElementById('layerDetails.styleColumn'); 
    columnName= select.options[select.selectedIndex].value; 
    if (columnName == null || columnName == '') 
    { 
    columnName= select.options[select.selectedIndex].text; 
    } 
    } 
Các vấn đề liên quan