2014-04-14 15 views
5

Tôi có vấn đề nhỏ. Tôi cần chọn tùy chọn từ <select> A, đã kích hoạt hành động và chọn <option> đầu tiên ở số <select> B theo giá trị từ <option> từ A. Mọi thứ hoạt động tốt, nhưng tôi không thể chọn CHỈ nhóm chọn cuối cùng và tùy chọn của mình.jQuery - Không thể chọn tùy chọn đầu tiên trên optgroup cuối

Hãy thử nhìn vào jsfiddle

Lỗi này có vẻ là chỉ trên Firefox (Linux, Win7). Google Chrome là ok. Bất kỳ ý tưởng nào?

Mã (html):

<select id="charset" name="charset"> 
    <option value=""></option> 
    <option value="armscii8">ARMSCII-8 Armenian</option> 
    <option value="ascii">US ASCII</option> 
    <option selected="selected" value="utf8">UTF-8 Unicode</option> 
</select> 

<select id="collation" name="collation"> 
    <optgroup label="armscii8"> 
     <option value="armscii8_bin">armscii8_bin</option> 
     <option value="armscii8_general_ci">armscii8_general_ci</option> 
    </optgroup> 
    <optgroup label="ascii"> 
     <option value="ascii_bin">ascii_bin</option> 
     <option value="ascii_general_ci">ascii_general_ci</option> 
    </optgroup> 
    <optgroup label="utf8"> 
     <option value="utf8_bin" selected="selected">utf8_bin</option> 
     <option value="utf8_czech_ci">utf8_czech_ci</option> 
     <option value="utf8_danish_ci">utf8_danish_ci</option> 
     <option value="utf8_esperanto_ci">utf8_esperanto_ci</option> 
    </optgroup> 
</select>` 

Mã js:

(function($){ 

function setCollation(charset) { 
    $('#collation optgroup option').removeAttr('selected'); 
    $('#collation optgroup').hide(0); 

    if (charset && charset != '') { 
     $("#collation optgroup[label='" + charset + "']").show(0); 
     $("#collation optgroup[label='" + charset + "'] option:first").attr('selected', 'selected'); 
    } 
} 

$('#charset').change(function() { 
    setCollation($(this).val()); 
}); 
setCollation($('#charset').val()); 

})(jQuery); 

CẬP NHẬT

tôi cập nhật jsfiddle nơi tôi loại bỏ chức năng show/hide.

tôi sẽ cố gắng tái tạo như thế nào kịch bản hoạt động:

  1. Khi tôi chọn Collation từ trong hộp chọn đầu tiên (. Giá trị fe DOS Russin), thứ hai chọn được chọn là tôi cần.

  2. Tôi đã thay đổi giá trị lựa chọn đầu tiên sang giá trị khác. Trong thời điểm này là tất cả mọi thứ ok.

  3. ! Tôi thay đổi trở lại DOS tiếng Nga và trong thời điểm này hộp chọn thứ hai không được chọn như trong bước đầu tiên.

Đây là hành vi rất lạ và tôi không thể thực hiện công việc trong FF.

+4

Hãy xem xét những gì sẽ xảy ra với câu hỏi của bạn nếu/khi jsfiddle.net đi offline. Đúng vậy, nó sẽ trở nên vô dụng đối với mọi người. Vui lòng đọc [Ngăn chặn các bài đăng có liên kết đến jsfiddle và không có mã] (http://meta.stackexchange.com/questions/149890/prevent-posts-with-links-to-jsfiddle-and-no-code) nếu tôi không thành công thuyết phục bạn. –

+0

Nếu tôi xóa dòng '$ ('# collation optgroup'). Hide (0);' và tôi khởi chạy lại fiddlejs, nó có cùng hành vi trong Chrome và Firefox: tất cả các 'optgroup' ở lại và chỉ mục đầu tiên của 'optgroup' tốt được chọn. – PierreF

Trả lời

4

Tôi không thể giải thích lý do hành vi của trình duyệt không nhất quán nhưng tôi có thể cho bạn biết rằng việc thay đổi thành .prop dường như đã giải quyết được sự cố.

$('#collation optgroup').prop('disabled', true); 
    $('#collation option').removeAttr('selected'); 

    if (charset && charset != '') { 
     $("#collation optgroup[label='" + charset + "']").prop('disabled',false); 
     $("#collation optgroup[label='" + charset + "'] > option:eq(0)").prop('selected', true); 

Nhìn thấy nó trong hành động:

http://jsfiddle.net/8pAAp/1/

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