Warum klappt diese elements Abfrage nicht?
Can
- javascript
Hi Leute,
also ich bin gerade am JS basteln und will aus mehreren select Tags herausfinden, welches select gewählt wurde. Aber meine Abfrage klappt nicht. Sie schaut so aus:
for(var i = 0; i < all.length; i++)
if(document.forms[0].elements[i].selected == true)
alert(document.forms[0].elements[i].selectedIndex);
Ich will in dem Fall nämlich nicht wissen, welches option Feld aktiviert wurde, sondern nur welches Selekt, da ich diese Variable dann in der nächsten Operation benötige.
Kann mir einer sagen, warum dieser Code nicht klappt?
Grüße, Can
Moin
for(var i = 0; i < all.length; i++)
was hast du hier mit "all" zu schaffen, du suchst doch nach forms[0].elements?
Gruß
rfb
Servus,
das habe ich vergessen zu erwähnen... Das ist folgender COde:
var all = el.form[el.name];
alert('es gibt ' + all.length + ' Listen mit dem Namen ' + el.name);
for(var i = 0; i < all.length; i++)
was hast du hier mit "all" zu schaffen, du suchst doch nach forms[0].elements?
Grüße, Can
Moin
das habe ich vergessen zu erwähnen... Das ist folgender COde:
wie wäre es mal mit dem vollständigen Code, oder soll ich bei _jeder_ Variablen nachfragen wo die nun wieder herkommt?
Gruß
rfb
Oki, Punkt für Dich!
<script language="JavaScript" type="text/JavaScript">
<!--
function showAll(el)
{
var all = el.form[el.name];
alert('es gibt ' + all.length + ' Listen mit dem Namen ' + el.name);
for(var i = 0; i < all.length; i++)
if(document.forms[0].elements[i].selected == true)
alert(document.forms[0].elements[i].selectedIndex);
}
//-->
</script>
Im HTML steht:
<form id="form1" name="form1" method="post" action="">
<select name='sortieren[]' onchange="showAll(this)">
<option value='0-1' selected>0-1</option>
<option value='2-3' >2-3</option>
<option value='4-5' >4-5</option>
<option value='6-7' >6-7</option>
<option value='8-9' >8-9</option>
<option value='10-11' >10-11</option>
</select>
<select name='sortieren[]' onchange="showAll(this)">
<option value='0-1' >0-1</option>
<option value='2-3' selected>2-3</option>
<option value='4-5' >4-5</option>
<option value='6-7' >6-7</option>
<option value='8-9' >8-9</option>
<option value='10-11' >10-11</option>
</select>
<select name='sortieren[]' onchange="showAll(this)">
<option value='0-1' >0-1</option>
<option value='2-3' >2-3</option>
<option value='4-5' selected>4-5</option>
<option value='6-7' >6-7</option>
<option value='8-9' >8-9</option>
<option value='10-11' >10-11</option>
</select>
Moin
var all = el.form[el.name];
all ist ein reservierter Name für das all-Object, also besser ändern
if(document.forms[0].elements[i].selected == true)
die Bedingung tritt nie ein, da müsste immer undefined als Ergebnis kommen, denn selected gibt es nur beim Unterelement options.
Gruß
rfb
Servus rfb,
var all = el.form[el.name];
all ist ein reservierter Name für das all-Object, also besser ändern
Gut zu wissen, das werde ichmachen...
if(document.forms[0].elements[i].selected == true)
die Bedingung tritt nie ein, da müsste immer undefined als Ergebnis kommen, denn selected gibt es nur beim Unterelement options.
Des ist schlecht. Gibt es eine andere Möglichkeit, herauszu finden, welches elemets[#] gewählt wurde?
Viele Grüße, Can
Hi,
Des ist schlecht. Gibt es eine andere Möglichkeit, herauszu finden, welches elemets[#] gewählt wurde?
Du übergibst doch das select-Element, in dem die Änderung eintritt, eh schon direkt an die Funktion showAll:
function showAll(el)
{
[...]
<select name='sortieren[]' onchange="showAll(this)">
[...]
<select name='sortieren[]' onchange="showAll(this)">
[...]
<select name='sortieren[]' onchange="showAll(this)">
In Deiner function showAll ist el das select-Element, das geändert wurde.
cu,
Andreas
gruss Can,
Deine funktion [showAll] *kennt* das an sie uebergebene element ja bereits.
dannach durchlaeuft die funktion eine collection aller gleichnamig lautenden
elemente die zusammen mit dem an die funktion uebergebenen element in
einunddemselbem formular stecken (gleichnamig lautende elemente eines
anderen formulars werden nicht beruecksichtigt).
soweit, sogut - und bishierher auch vollkommen richtig - jetzt mach doch
einfach weiter:
Deine funktion durchlaeuft eine collection voller [HTMLSelectElement]e und
referenziert schon das von Dir gesuchte [HTMLSelectElement].
die zu formulierende bedingung lautet also wie?
das war bestimmt so ein *wald vor lauter baeume ding* oder ?-)
so long - peterS. - pseliger@gmx.net
Danke für die Erklärung, dann meinst wohl das hier:
for(var i = 0; i < laenge.length; i++)
for(var j = 0; j < laenge.length; j++)
if(document.forms[0].elements[i].options[j].selected == true && document.forms[0].elements[i].options[j].defaultSelected == false)
alert(i);
So bekomme ich die richtigen Werte... Danke nochmals! Can
hallo again Can,
Danke für die Erklärung, dann meinst wohl das hier:
...
noe. ich wollte eigentlich auf dasselbe, wie MudGuard
hinaus. ich dachte, wenn Du die [HTMLSelectElement]e
der collection mit dem an die funktion uebergebenem
vergleichst - so in der art: (all[i] == elm) - fallen Dir
die schuppen von den augen.
So bekomme ich die richtigen Werte... Danke nochmals! Can
ja, aber Du hast es Dir unnoetig schwer gemacht.
by(t)e by(t)e - peterS. - pseliger@gmx.net
Servus peterS
noe. ich wollte eigentlich auf dasselbe, wie MudGuard
hinaus. ich dachte, wenn Du die [HTMLSelectElement]e
der collection mit dem an die funktion uebergebenem
vergleichst - so in der art: (all[i] == elm) - fallen Dir
die schuppen von den augen.
Oh je, warum einfach, wenn es auch schwierig geht. Danke für Euere geduld... Ich bin einfach kein JS Schreiber. Aber langsam beginnt es Spaß zu machen.
Schönes Wochenende, Can
Hallo,
var all = el.form[el.name];
all ist ein reservierter Name für das all-Object, also besser ändern
Hä? http://de.selfhtml.org/javascript/sprache/reserviert.htm@title=Hier steht nix davon.
mfg. Daniel