Hej Lasse
On 3 Okt., 00:07, Lasse Reichstein Nielsen <l...@hotpop.com> wrote:
> Kim Emax <kime...@gmail.com> writes:
> > Jeg prøver at få en key fra en række selectbokse lavet som
> > associativte arrays, men det driller.
>
> Her må du gerne være mere præcis med hvad det er du forsøger at opnå.
> Jeg har en idé ud fra det følgende, men jeg er ikke helt sikker.
Jeg præciserer nedenfor...
> > Prøver jeg med en selectbox, så er det ikke noget problem:
>
> > <select name="products" OnChange=update()>
>
> > henter jeg værdien af med:
> > alert(document.invoiceAdd.products.selectedIndex)
>
> Her vil jeg anbefale at bruge:
> document.forms["invoiceAdd"].elements["products"].selectedIndex
> bl.a., for at gøre det mere klart hvad der er HTML-navne og hvad der er
> JavaScript-objekter (og fordi det fanger andre fejl, bl.a., den der
> rammer dig her).
Jeg får det samme output, det count jeg er nået til. Jeg er
interesseret i den Key, som products[count] har, når jeg laver en
"OnChange"
> > Her echoer fint den key, der vælges i alertboksen.
>
> Forhåbentligt er det nummeret på den valgte option, ikke dens navn.
> (Det kan selvfølgelig være at det er det samme :)
jeg har en funktion, der laver en række (<tr></tr>), som kører en
count og incrementer så hver linie er unik. Laver jeg en:
alert('<select name="products['+count+']" id="products['+count+']"
OnChange=update_price('+count+')>')
printer den:
<select name="products[1]" id="products[1]" OnChange=update_price(1)>
næste linie bliver
<select name="products[2]" id="products[2]" OnChange=update_price(2)>
osv
> > Men laver jeg et array:
>
> > <select name="products[1]" OnChange=update()>
> > <select name="products[2]" OnChange=update()>
>
> Du laver ikke noget array, eller noget der ligner.
>
>
> Du laver to select-elementer. De hedder henholdsvis "products[1]" og
> "products[2]". De kunne lige så godt have hedder "argle" og "bargle".
> Det er bare HTML-navne, og de fortolkes ikke som Javascript.
Jeg tror ikke jeg forstår dig her? Siger du at javascript ikke ser
products[2] som et array, der hedder products og at dette er key nr.2?
For når jeg har lavet 3 linier, så hiver jeg dem pænt ud via php, når
jeg submitter med en foreach:
foreach($_REQUEST[productline] AS $key => $amount) {
if($DEBUG)
print "$key: antal $amount " . $_REQUEST[products][$key] . " -
rabat: " . $_REQUEST[discount][$key] ." - text:" . $_REQUEST[text]
[$key] . "<br>";
Så jeg ser og behandler det nu som et array
Der er intet i vejen
for at du laver en side, der hedder test.php:
<?
if($_POST['bestil']) {
foreach($_POST['beer'] as $key => $val) { // her render vi arrayet
igennem
print "$key - $val<br>";
}
}
?>
<form action="test.php" method="post" name="array_test">
<input type="text" name="beer[1]">
<input type="text" name="beer[2]">
<input type="text" name="beer[3]">
<input type="submit" name="bestil" value="bestil">
</form>
Prøv selv. det jeg så gerne ville kunne var at hente værdien i f.eks.
beer[1] og bruge den, f.eks. til at skrive ud i en div, eller som i
mit tilfælde, til at skrive prisen på et produkt i et andet input
felt.
Iflg dette eksempel så burde jeg kunne gøre hvad jeg vil:
http://www.pageresource.com/jscript/jarray2.htm
> > og henter værdien med:
> > alert(document.invoiceAdd.products[1].selectedIndex)
> > kommer IE med denne fejl:
> > document.invoiceAdd.products.1 er null eller ikke et objekt
>
> Korrekt sagt af den. Det du forsøger her er at bruge
> "document.invoiceAdd.products" som array og tilgå element "1".
> Men "document.invoiceAdd.products" er null, fordi du ikke har
> nogen elementer i din HTML med navnet "products".
>
> Hvis du bruger den anden notation, og skriver:
> document.forms["invoiceAdd"].elements["products[1]"].selectedIndex
> så skulle det virke. De giver dig igen ikke noget array.
>
> Hvis du *vil* have et array, så kan du give select'erne *samme*
> navn:
>
> <select name="products" ...>
> <select name="products" ...>
>
> Så vil browsere (ikke helt standard-mæssigt, men ganske konsekvent)
> lave et array, så:
> document.forms["invoiceAdd"].elements["products"][0].selectedIndex
> er selected-index for den første form-control i formen "invoiceAdd"
> med navnet "products".
Næh, den giver mig "undefined" i det øjeblik jeg har 2 linier og
vælger en værdi i selectboxen, fordi begge linier nu indeholder
"products", og ikke længere er unik
> > Hvorfor er [] væk?
>
> Fordi objekt["navn"] og objekt.navn
> er det samme hvis "navn" er et gyldigt variabelnavn.
> IE sløser lidt med notationen når den skriver "...products.1", men den
> mener "...products[1]", og det fejler, for der er intet element i formen
> med navnet "product".
Ahh... IE... vores allesammens ven. Jeg bruger normalt kun FF, men
funktionen virker ikke deri, såee... jeg må fikse den del først...
eller lave en statisk side at teste på...for at eliminere fejlkilder
også... Værdierne kommer som sagt ud med PHP efterfølgende...
> > Og hvordan tilgår jeg værdien i et associativt array?
>
> Her ser det ud til at du er ude efter et helt almindeligt array (altså
> indekseret med tal). Det er dog ligegyldigt hvad et array/objekt i
> Javascript er indekseret med, man bruger samme måde at slå op:
> Med firkantede parenteser, ganske som du gør.
Din snak om at det ikke er et array og nu at det er et almindeligt
array forvirrer mig lidt?
> Det svære er at sørge for at der er et array at slå op i :)
hehe
/Kim