Folgender auf mootools basierende Code wurde von mir nicht am lebenden Beispiel getestet, könnte daher also Fehler enthalten, die du aber vielleicht mit Firebug o.ä. selbst ausmerzen kannst. Vielleicht geht das sogar noch kürzer und einfacher, aber mein Vorschlag ist dafür wirklich ein "Schnellschnipsel" ...
Code:
window.addEvent("domready",function()
{
$$("select").each( function()
{
// select lists to process
if ( this.getElements("option[value=de],option[value=at],option[value=ch]").length > 0 )
{
// prepend separator item to list
new Element("option",{text:"---"}).inject(this,"top");
// extract promoted items from list and re-prepend to it in reverse order
this.getElement("option[value=ch]").inject(this,"top");
this.getElement("option[value=at]").inject(this,"top");
this.getElement("option[value=de]").inject(this,"top");
// use closure scope to access list on form submit
var that = this;
// prevent form submit on selecting separator
this.getParents("form")[0].addEvent("submit",function()
{
var selected = that.getSelected().shift();
if ( selected && !selected.get("value") )
return false;
});
}
});
});
Der Listenfilter im ersten if-Statement könnte natürlich false positives produzieren, also auch Listen anpassen, die du nicht anpassen wolltest. Da müsste man dann einen besseren CSS-Selektor ansetzen.
Lesezeichen