2009-06-10 62 views
0

我在使用jQuery的Opera中遇到了<optgroup>的問題。首先,代碼如下:<optgroup> in Opera using jQuery

// returns a jQuery optgroup object 
function getSpaceOptGroup(locationName) { 
    var location = locations.first(function(l) { 
     return l.name == locationName; 
    }); 

    var optGroup = $("<optgroup label='" + location.name + "'></optgroup>"); 

    $.each(location.spaces, function(i,x) { 
     optGroup.append("<option value='" + x.id + "'>" + x.name + "</option>"); 
    }); 

    return optGroup; 
} 

該函數返回到一個簡單的apend()。會發生什麼是隻有<opgroup>標籤出現,並沒有任何選項,但只在Opera中。它適用於FF,Safari和IE。任何幫助深表感謝。

+0

這個問題似乎並不存在於Opera 10中,只有Opera 9,6。 – Ethan 2009-06-10 18:56:29

回答

3

我在Linux上看到了使用jQuery 1.3和Opera 9.64的相同問題。如果我只是刪除<optgroup>標籤,則該列表會神奇地出現。

做了一些挖的,看起來這是一個Opera的bug,而不是一個jQuery錯誤:http://dev.jquery.com/ticket/3040

有顯然是一個解決方法,以及:http://dev.jquery.com/ticket/3040#comment:7

// Do not use: 
var optGroup = $("<optgroup></optgroup>"); 
var option = $("<option></option>"); 
// But: 
var optGroup = $(document.createElement("optgroup")); 
var option = $(document.createElement("option")); 
// Then everything works as expected 
optGroup.attr("label", "hello").append(
    option.append("foo"), 
    option.clone().text("bar")); 
// with append of course 
$("select#test5").append(optGroup); 
0

我也遇到了這個問題在我PHP Form Class的hierselect菜單,並在答案沒有工作給出的解決方法的代碼,但這並:

var optGroup = $(document.createElement("optgroup")).attr("label", "hello"); 
$("select#test5").append(optGroup); 
optGroup.append($(document.createElement("option")).val("foo").html("bar")); 

必須先將optGroup附加到選擇菜單,然後再將選項附加到optGroup。