Avatar billede mysli Nybegynder
08. april 2005 - 09:19 Der er 10 kommentarer og
1 løsning

Kan ikke bruge klammer om input name

Jeg har lavet følgende form:


<SCRIPT LANGUAGE="JavaScript"><!--
function EnableBank(){
        document.kontrakt.step2[reg].disabled=false;
        document.kontrakt.step2[kontonr].disabled=false;
        document.kontrakt.step2[gironr].disabled=true;
   

}

function EnableGiro(){
        document.kontrakt.step2[reg].disabled=true;
        document.kontrakt.step2[kontonr].disabled=true;
        document.kontrakt.step2[gironr].disabled=false;
}
   
//-->
</script>

<table cellspacing=10>
    <tr>
                <td>Bank</td>
                <td><input type=radio name="step2[type]" onclick=EnableBank()></td>
                <td width=20></td>
                <td>Reg.:</td>
                <td><input name="step2[reg]" size="3" maxlength=4 disabled></td>
                <td>Kontonr.:</td>
                <td><input name="step2[kontonr]" size="20"  disabled></td>
    </tr>
    <tr>
                <td>Giro</td>
                <td>
                <input type=radio name="step2[type]" onclick="EnableGiro()"></td>
                <td width=20></td>
                <td>Gironr.:</td>
                <td colspan=3><input name="step2[gironr]" size="42" disabled></td>
               

</table>

Problemet er, at funktionen ikke virker, når jeg kalder mine inputs noget med [ ].

Jeg bruger [ ] for bedre at kunne få overblik over min form, som er delt op i 29 dele.
Avatar billede -mundi- Nybegynder
08. april 2005 - 09:26 #1
document.kontrakt.elements['step2[gironr]'].disabled=false;

gør sådan istedet
Avatar billede skyggen2000 Nybegynder
08. april 2005 - 09:32 #2
well, normalt benytter jeg fx step2_gironr, som opdeling.
hej[x], hentyder til at det er et array hvilket det jo ikke er. Derfor kan du gøre som mundi siger , eller lave navnene om, så kan du benytte den metode du allerede har.
Avatar billede olebole Juniormester
08. april 2005 - 18:04 #3
<ole>

skyggen2000 >> Når formen rammer en server med PHP, bliver elementer med ens name-attributter - som ender med brackets - til et array. Derfor er der mange PHP'ere, der bruger denne notation, selvom den stinker kraftigt i forhold til JavaScript-HTML bindinger.

Det er nu snart ligegyldigt, for i XHTML kan man slet ikke bruge 'document.FORM_NAVN.ELEMENT_NAVN' bindingen. Der er man nødt til at kalde med ECMA-DOM bindinger (f.eks. document.getElementById) i stedet.

Når vi om et par år kan bruge XHTML på WWW, vil det således ikke længere være et problem med brackets i name-attributter - og når XHTML2.0 bliver en realitet, bliver HTML-forms, som vi kender dem, i øvrigt afløst af XForms - men det er en helt anden historie  :)

/mvh
</bole>
Avatar billede olebole Juniormester
08. april 2005 - 18:12 #4
- men til gengæld laver mysli en anden meget seriøs fejl. Man skal _altid_ bruge gåseøjne i array-kald: step2["type"] eller step2['type'].

At undlade gåseøjne på dette sted er en fejl. Det er det også i PHP, selvom PHP tørrer r.. på kodere med dårlig kodevaner og retter fejlen. Det er én af PHP's alvorlige uhensigtsmæssigheder  :o|

I PHP kan de manglende gåseøjne give anledning til alvorlige fejl - da PHP ofte gætter forkert og dermed ikke retter fejlen, eller retter den forkert - men i andre sprog resulterer det stort set _altid_ i fejl  :)
Avatar billede mysli Nybegynder
08. april 2005 - 20:35 #5
olebole - nu er dette ikke et 'rigtigt' array, men bare en måde at beskrive inputsne på, så man kan finde rundt i dem, det kunne for så vidt være ren html, det ændrer ikke noget.

Problemet er at javascript ikke kan hitte ud af det med [].

Men har valgt at bruge mundis metode.

Smid gerne et svar mundi:)
Avatar billede olebole Juniormester
08. april 2005 - 21:21 #6
mysli >> så er der vist noget, du har misforstået. Inputs med ens navne ligger for det første altid i et array i JavaScript - og i PHP vil alle inputs med navne som 'felt[]' optræde i et (helt rigtigt) array, der findes i $_POST["felt"]  :)

Det ændrer dog ikke spor ved, at du bør bruge gåseøjne - hvis du ønsker at undgå endnu flere problemer. At det så ville være betydeligt bedre at bruge en tekststreng uden brackets er så en anden ting  :)
Avatar billede -mundi- Nybegynder
09. april 2005 - 21:16 #7
svar.

Lidt sent, får exp mails på arb :-)
Avatar billede skyggen2000 Nybegynder
11. april 2005 - 09:24 #8
Ole >> Denne notation bliver da ikke til et array eftersom navnene er forskellige i javascript?
name="step2[type]"
name="step2[type1]"

Som jeg opfatter det, var problemet den navne notation, som han benytter for at have overblik over hvilke inputs der hører til hvilken form, hvilket også var det min kommentar var knyttet op mod.

Du skriver også:
Når formen rammer en server med PHP, bliver elementer med ens name-attributter - som ender med brackets - til et array.

Jeg skrev jeg plejede at benytte denne notation step2_gironr, der ikke ender med en bracket. Dog indeholder den en, men er det det samme?
Avatar billede olebole Juniormester
12. april 2005 - 16:41 #9
skyggen >> Hvilket med al ønskelig tydelighed viser det mere end uhensigtsmæssige i at bruge notation, der er beregnet til at bruge på en helt anden måde ..... der _er_ nemlig tale om et array. Er du i tvivl, så prøv:

<?var_dump($_GET)?>
<form action="" method="get">
<input type="text" name="gnu[hallo]"><br>
<input type="text" name="gnu[hallo2]"><br>
<button type="submit">TESTING</button>
</form>

- der på serveren vil resultere i et associativt array ved navn 'gnu', som har to elementer med 'hallo' og 'hallo2' som keys  :)
Avatar billede olebole Juniormester
12. april 2005 - 16:43 #10
PS: Kalder du dem alle name="gnu[]" - vil array'et blive tal-indekseret men 0 som base
Avatar billede skyggen2000 Nybegynder
12. april 2005 - 16:53 #11
allright, dog bliver de stadig først til et array på serveren, jeg skrev i  javascript og mente clientside.

Gælder det både for PHP og ASP?

Det er korrekt, hvis ikke han ønsker den funktionalitet bør han skrive navnene om til den notation som jeg foreslog til at starte med dvs. med "_" i stedet for brackets.

Måske er det rent faktisk den funktionalitet han også har brug for til behandling af data når der fx. skal gemmes?
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