2009-06-10 4 views
0

Ich habe ein Problem mit <optgroup> in Opera mit jQuery. Zuerst, hier ist der Code:<optgroup> in Opera mit 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; 
} 

Diese Funktion liefert zu einem einfachen apend(). Was passiert, ist, dass nur die <opgroup> Beschriftung erscheint und keine der Optionen, sondern nur in Opera. Es funktioniert in FF, Safari und IE. Jede Hilfe wird sehr geschätzt.

+0

Dieses Problem scheint in Opera 10 nicht zu existieren, nur Opera 9,6. – Ethan

Antwort

3

Ich sehe das gleiche Problem mit jQuery 1.3 und Opera 9.64 unter Linux. Wenn ich einfach die <optgroup> Tags entfernen, erscheint die Liste magisch.

ein bisschen graben tun, sieht es so ein Opera Bug, kein jQuery Bug: http://dev.jquery.com/ticket/3040

Es gibt offenbar auch eine Abhilfe: 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

ich auch in diese lief Problem für die hierselect Menü in meinem PHP Form Class und der Abhilfe Code in der Antwort hat nicht funktioniert, aber dies tat:

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

Die optGroup muss zuerst an das Auswahlmenü angehängt werden und dann die Option (en) an die optGroup angehängt werden.