Mehrere Select's: alle Einträge markieren
Beni
- javascript
Hallo!
Ich sitze hier an einem Problem, dass allmählich Zeitkritisch wird :(
Ich habe eine Anwendung, die unter firefox problemlos läuft, unter IE6 allerdings Probleme bereitet.
Es ist ein Formular zur Verwaltung von Personen, die Beschreibung der Tätigkeit kann mehrere Werte enthalten und wird mittels einem Select-dropdown dargestellt.
Zu jeder Person gibt es ein Eingabefeld, mit dem Neue Werte zum Select hinzugefügt werden können, ausserdem existiert ein Button, mit dem Werte aus dem Select gelöscht werden können.
Die Anzahl an Personen und die Anzahl an Tätigkeiten ist dynamisch, dieser Codeteil funktioniert auch Problemlos.
Das Problem kommt beim Absenden des Formulares auf.
Ich habe einen <input type="button"> definiert, der die JS-Funktion "sendForm()" aufruft.
In dieser Funktion sollen nun alle Selectboxen auf "multiselect" gesetzt werden, danach müssen in allen Selectboxen alle Werte markiert werden und abschliessend das Formular gesendet werden.
Leider meckert mein IE (Firefox machts anstandslos) beim klicke auf den Button, dass "das Objekt die Eigenschaft nicht unterstützt".
Ich weis leider nicht mehr weiter, da in SelfHTML beschrieben wird, dass IE 5x die Eigenschaft hat und einiges testen/Probieren nicht zum Erfolg geführt hat.
Leider müssen alle Werte selektiert werden, da die Anwendung dies so erwartet und ein umprogrammieren sehr viel Arbeit machen würde.
Hier noch der Code des Sendenbuttons:
----------- SNIP -----------
/**
* Alle Elemente des Formulars durchgehen, Selectfelder
* multivalued setzen und alle werte aller Selects markieren
**/
function sendForm(){
for(var thiselement in document.forms[0]){
if(document.forms[0].elements[thiselement]){
document.forms[0].elements[thiselement].multiple = "select-multiple";
for(var thisoption in document.forms[0].elements[thiselement].options){
if(document.forms[0].elements[thiselement].options[thisoption]){
document.forms[0].elements[thiselement].options[thisoption].selected = true;
}
}
}
}
document.forms[0].submit();
}
----------- SNIP -----------
Vielen Dank für eure Hilfe!
Beni
hallo,
also ich hatte mal so ein ähnliches problem...
meine noch im hinterkopf zu haben das ich das mit:
getElementByID gelöst habe .. also alle elemente darüber ansprechen..
wäre ein versuch wert
cu
kai
also ich hatte mal so ein ähnliches problem...
meine noch im hinterkopf zu haben das ich das mit:
getElementByID gelöst habe .. also alle elemente darüber ansprechen..
wäre ein versuch wert
Das ist Unsinn.
Formularfelder lassen sich wesentlich bequemer, schneller und in allen Browsern die JS können, über die dafür vorgesehenen Objekte document.forms[..] und document.forms[..].elements[..] ansprechen.
Struppi.
Das Problem kommt beim Absenden des Formulares auf.
Ich habe einen <input type="button"> definiert, der die JS-Funktion "sendForm()" aufruft.
In dieser Funktion sollen nun alle Selectboxen auf "multiselect" gesetzt werden, danach müssen in allen Selectboxen alle Werte markiert werden und abschliessend das Formular gesendet werden.
Wenn ich das richtig sehe, versucht deine Funktion bei allen Formularfeldern die Eigenschaft multiple zu setzen und von allen Fomrularfeldern die Options abzufragen. evtl. solltest du erst überprüfen ob es sich überhaupt um ein Auswahlfeld handelt.
Struppi.
Also erstmal vielen Dank für die raschen Antworten :)
wie kann ich denn überprüfen, ob es sich um ein entsprechendes Select-Element handelt?
wie kann ich denn überprüfen, ob es sich um ein entsprechendes Select-Element handelt?
Indem du die Eigenschaft .type überprüfst (soweit ich weiss ist diese im IE und Mozilla Browser aber unterschiedlich bei Auswahlfeldern)
Struppi.
Hm, das mit type klappt. Allerdings nur hardgecoded, sobald ich über "thiselement" gehen möchte, klappt es nicht mehr:
weder
for(var thiselement in document.forms[0].elements){
[...]
}
noch
for(var thiselement in document.forms[0]){
[...]
}
bringt die erwartetn Ergebnisse, ich weis nicht, was genau da zurückgegeben wird - offenbar aber nur ein string!
kleiner Nachtrag: Offenbar liefert mir for-in nur die Eigenschaften, aber nicht die Unterobjekte - kann ich mir irgendwie alle unterobjekte geben lassen?
Oder wie greife ich am geschicktesten auf die unterobjekte zu, wen ich nicht weis, wieviele es davon gibt?
Hallo nochmal.
Ich konnte das Problem lösen, ahbe jetzt aber ein seltsames Phänomen:
Alles klappt, wenn das Script langsam abläuft, sprich wenn das Alert aktiv ist.
Ist der Alert nicht aktiv, wird jeweils nur der letzte Eintrag der Liste auf "selected" gesetzt!
function sendForm(){
for(var i=0; i < document.forms[0].elements.length; i++){
if(document.forms[0].elements[i].type == 'select-one' ||document.forms[0].elements[i].type == 'select-multiple'){
document.forms[0].elements[i].multiple = "select-multiple";
for(var j=0; j < document.forms[0].elements[i].options.length; j++){
document.forms[0].elements[i].options[j].selected = true;
// alert('j='+j+' i='+i);
}
}
}
// document.forms[0].submit();
}
Hallo Beni.
Mehrere Select's: alle Einträge markieren
Wozu soll hier eigentlich das Apostroph dienen?
Einen schönen Mittwoch noch.
Gruß, Ashura