webForumDet fria alternativet
Logga in / Bli medlem

Seslectbox som array

JavaScript

15 svar · 305 visningar · startad av skyman

Medlem sedan juli 20012 450 inlägg
Trådstart#1

Kan man namnge en selectbox som:

<select name="s2[]" multiple>

och sedan kunna använda den i javascript?

Hur ska man annars kunna hämta de poster som finns i den om den bara heter "s2"?

Medlem sedan dec. 20025 483 inlägg
#2

Visst kan du använda s2[] som namn. Med "poster", menar du då alternativ som finns i dess "option"-element?

<script type="text/javascript">
<!--

window.onload=function(){
     var e=document.forms["f"].elements["s2"];

     alert( e.options[0].text+ " - " +e.options[0].value );
};

//-->
</script>

...

<form name="f">
<select name="s2">
     <option value="Foo">Bar</option>
     <option value="Faa">Baz</option>
</select>
</form>

:)

Medlem sedan sep. 20021 655 inlägg
#3

Jag tror att skyman undrar hur man kan använda de valda alternativen, om det finns flera stycken valda, på samma sätt som man kan skriva document.forms['aa'].elements['bb'].value. Försöker man göra på det sättet när man har flera alternativ i en select valda används bara det första värdet.

Det är ju fullt möjligt att göra en loop som kontrollerar om en option är vald, men jag tror inte att man kan lösa det på något annat sätt.

Medlem sedan juli 20012 450 inlägg
#4

Jag tror att ni förstod mig rätt men jag kan ju förklara mig lite ytterligare.

För att kunna hämta de alternativ som är selectade mha php så måste den vara en array, alltså heta s2[].
Men ger jag den det namnet så hade jag problem med det i javascriptet, jag kan ju inte skriva:

var e=document.forms["f"].elements["s2[]"];
Medlem sedan dec. 20025 483 inlägg
#5

Du måste loopa igenom "select"-elementet för att ta reda på vilka alternativ som är valda. Således behöver du alltså inte använda namnet s2[] på detta element.

:)

Medlem sedan juli 20012 450 inlägg
#6

Menar du loopa med javascript eller med php?
Om php, hur så?
Om javascript, varför? ;)

Medlem sedan dec. 20025 483 inlägg
#7

Red. Det blev lite överflödig kod.

Om du på den mottagande sidan skall hämta de markerade valen är det väl bara att använda dig av en vanlig "formulärfunktion"?

' ASP
Response.Write( Request.Form("s2[]") )

:)

Medlem sedan juli 20012 450 inlägg
#8

Men där har du ju använt namnet s2[]...
Skrivfel?

Medlem sedan dec. 20025 483 inlägg
#9

Jag redigerade inlägget lite på grund av överflödig kod ;)

Namnet s2[] går utmärkt att använda, såväl i ASP som i JavaScript.

:)

Medlem sedan juli 20012 450 inlägg
#10

Jag ändrade till s2[] i min select men hur ska jag då skriva i tex denna funktion?

function checkAll(s){
   var f=document.forms["form"].elements[s],i=f.length;
   while(i-->0){
      f[i].selected=true;
   }
};

Ska jag ändra så att s1 också blir en array?

Medlem sedan dec. 20025 483 inlägg
#11

Den där funktionen behöver du inte ändra på alls ( du skickar alltså in namnet på "select"-elementet vid anropet? ).

Hakparenteser eller ej, koden skall fungera. ;)

:)

Medlem sedan juli 20012 450 inlägg
#12

Precis jag anropar den enligt :

<input type="button" onClick="checkAll('s2');" value="Alla">

Men jag får fel...

'length' är null eller inte ett objekt

och det verkar vara i funktionen add...

Medlem sedan dec. 20025 483 inlägg
#13

Vi kanske missuppfattar varandra ;) Eftersom du anropar funktionen med namnet på "select"-elementet, s2 i det här fallet, måste alltså detta element heta s2, ej s2*[]***.

:)

Medlem sedan juli 20012 450 inlägg
#14

Ha!
Nu så, jag tyckte du sa att man inte kunde använda namnet s2[] när man använde javascript men jag ändrade överallt där jag anropar s2 till s2[] och då funkar det :)

Tack för hjälpen!

Medlem sedan dec. 20025 483 inlägg
#15

Då förstår vi varandra :bire

:)

Medlem sedan juli 20012 450 inlägg
#16

Det är ju kanon! :birp

257 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)