2009-06-10 63 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。