Avatar billede whatever Nybegynder
01. august 2001 - 11:02 Der er 13 kommentarer og
2 løsninger

DOM-reference til felt med navn felt[]!

Jeg har et temmeligt irriterende problem. Jeg ønsker at udføre nogle php-kommandoer på de valgte værdier i en selectbox, og bruger dertil en \"for\"-løkke. Select-taggen ser ud som følgende:

<select name=\"selectImage[]\" size=\"10\" onChange=\"document.image.src=\'form.selectImage.options[form.selectImage.selectedIndex].value\" multiple>

Men den går kun, hvis navnet på feltet er \"selectImage\" og altså ikke \"selectImage[]\", som jo er nødvendigt for at arbejde med en \"for\"-løkke.

Hvordan laver jeg en DOM-reference som ovenstående, der virker med navnet \"selectImage[]\"?
Avatar billede nute Nybegynder
01. august 2001 - 11:07 #1
du kan ikke bruke [] som en del av din idendifikator av et formelement. Hvis du skal ha tak i lengden på din selectbox, skal du benytte:

var len = document.formname.selectImage.length;

deretter:
for(i=0;i<=len;i++){}

/nute
Avatar billede roenving Novice
01. august 2001 - 11:07 #2
Jamen dine options har da i forvejen et index, som du kan bruge -- jeg kan da ikke lige se, at du skulle have brug for et index mere.

En helt igennem lovlig reference ville f.eks. være:

for (i=0; i<=document.selectImage.length; i++) {
  if (document.selectImage[i].checked) {
  etEllerAndet;
  x = i;
  }
}

hth
jes
Avatar billede nikolajdu Nybegynder
01. august 2001 - 11:08 #3
Hvad er det du ønsker og hvordan ser din for løkke ud???
Avatar billede roenving Novice
01. august 2001 - 11:08 #4
Hov ...

document.selectImage

skal selvfølgelig være:

document.formNavn.selectImage
Avatar billede whatever Nybegynder
01. august 2001 - 11:26 #5
Undskyld, at jeg ikke formulerede mig helt præcist nok. \"For\"-løkken er i php-scriptet, som behandler min form.

Hele min form ser således ud:
--------------------------------------------------
<form method=\"post\" name=\"upload_ide\" action=\"#\" ENCTYPE=\"multipart/form-data\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1000000\">
<input type=\"hidden\" name=\"phpaction\" value=\"1\">
<select name=\"selectImage[]\" size=\"10\" onChange=\"document.image.src=\'http://localhost/spriven/jbs-temp/pics/spriide/\' + document.upload_ide.selectImage.options[document.upload_ide.selectImage.selectedIndex].value\" multiple>
<?php
$handle=opendir(\'/apache/htdocs/spriven/jbs-temp/pics/spriide/\');
while (false!==($file = readdir($handle))) {
    if ($file != \".\" && $file != \"..\") {
        echo \"<option value=\\\"$file\\n\\\">$file\\n</option>\";
    }
}
closedir($handle);
?>
</select>
<input type=\"button\" value=\"Slet\" name=\"slet\" onClick=\"setAction(this.form,\'upload_ide.php?mode=delete\')\">
<input type=\"file\" name=\"imageFile\" size=\"30\">&nbsp;&nbsp;<input type=\"button\" value=\"Upload\" onClick=\"setAction(this.form,\'upload_ide.php?mode=upload\')\"
-------------------------------------------------

Her er det naturligvis kun form elementerne, som er taget med. Pointen er, at select-feltet er en liste over filnavne. Ved at klikke på et af dem vises billedet ved at ændre \"src\" for et billede på siden.

Således er det eneste jeg skal bruge blot en dom-reference til at ændre dette billede. \"For\"-løkken ligger i php-scriptet.

Således ser min onChange således ud:
document.upload_ide.selectImage.options[document.upload_ide.selectImage.selectedIndex].value

- hvilket ikke virker. Men hvordan skal referencen så se ud?
Avatar billede erikjacobsen Ekspert
01. august 2001 - 11:40 #6
Du kan vel inden i <SELECT>-en skrive

this.options[this.selectedIndex] .... osv
Avatar billede jakoba Nybegynder
01. august 2001 - 11:42 #7
I den situation kan du ofte bruge \"korrekt Array adressering\":

<select name=\"selectImage[]\" size=\"10\" onChange=\"document.image.src=\'form.elements[\"selectImage[]\"].options[form.elements[\"selectImage[]\"].selectedIndex].value\" multiple>

men det er ligegod nemmere blot at sige:

<select name=\"selectImage[]\" size=\"10\" onChange=\"document.image.src=this.options[this.selectedIndex].value\" multiple>

(this refereret til det formelement den står i:)

mvh JakobA
Avatar billede jakoba Nybegynder
01. august 2001 - 11:45 #8
erikjacobsen >> undskyld. det er ikke for at blande mig, bare at jeg skriver langsomt og så har du skrevet noget imens.
Avatar billede roenving Novice
01. august 2001 - 11:46 #9
Jamen er problemet med referencen ikke, at en select ikke har selectedIndex, den har en checked-property, som skal findes -- derfor brugte jeg det eksempel, jeg gjorde =;-]
Avatar billede erikjacobsen Ekspert
01. august 2001 - 11:47 #10
Bare rolig - jeg griner også kun af at du er så langsom .....

(sommetider, når jeg har skrevet et svar, tager jeg
lige en Ctrl-C af mit svar, reloader, og ser om det
stadig er relevant ... jeg er nemlig heller ikke
så hurtig!)
Avatar billede erikjacobsen Ekspert
01. august 2001 - 11:51 #11
Problemet er egentlig multiple... Man får kun den første
med selectedIndex - er det et problem ??

Man altså navnet, med etellerandet[], er ikke noget
problem
Avatar billede erikjacobsen Ekspert
01. august 2001 - 11:53 #12
Ja, for det giver en fejl hvis man så får valgt ingen,
altså fravælger alle de valgte. Så er this.selectIndex jo -1

Kan du ikke brygge et eller andet sammen Jakoba - jeg
har dårligt tid
Avatar billede jakoba Nybegynder
01. august 2001 - 12:00 #13
undgår \'ingen valgte\' problemet.

<select name=\"selectImage[]\" size=\"10\" onChange=\"if (this.selectedIndex>=0) document.image.src=this.options[this.selectedIndex].value\" multiple>


Avatar billede jakoba Nybegynder
01. august 2001 - 12:06 #14
eller til dit php:

onChange=\"if (this.selectedIndex>=0) document.image.src=\'http://localhost/spriven/jbs-temp/pics/spriide/\' + this.options[this.selectedIndex].value\" multiple>

prøv om ikke det dur.

mvh JakobA
Avatar billede olebole Juniormester
01. august 2001 - 14:02 #15
<ole>
Erik >> I dette tilfælde er det ikke noget problem med brackets i id\'en - men kan vi ikke være enige om, at det er lidt risky kodeskik? Det kunne se ud til, at php-folk anvende den ofte - for jeg har da været ude for, det gav php\'ere problemer - flere gange.
Ved dynamiske referencer, hvor man anvender dot-notation i JavaScript, kan man komme ud for at JS misfortolker og opfatter f.eks. et lagnavn som et array...og SÅ har man hele balladen  =o)
/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester