[js]Een variabele met blokhaken niet als array zien.

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende code:
<input type="radio" name="vraag[16]" value="113">
<input type="radio" name="vraag[16]" value="114">

Nu wil ik met javascript checken of er uberhaupt een waarde is ingevuld:
Dus ik denk zo:
if (formulier.vraag[16].value == "")
{
blabla
}

Maar dan krijg ik de javascript error:
vraag.16 is leeg of geen object

Wat doe ik fout?

Acties:
  • 0 Henk 'm!

Verwijderd

JS denkt dat het een array is. Waarom gebruik je geen andere namen voor je buttons?

Acties:
  • 0 Henk 'm!

Verwijderd

een variable in js mag alleen bestaan uit letters, underscores, dollartekens en cijfers

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

JavaScript:
1
document.forms['formulier'].elements['vraag[16]'].value

zo!
Verwijderd schreef op 28 mei 2003 @ 12:41:
een variable in js mag alleen bestaan uit letters, underscores, dollartekens en cijfers
het is geen js variabele, maar een name attribuut. De waarde daarvan is van het type CDATA en mag derhalve best blokhaken bevatten.

hmmz correctie vanwege uitzondering:
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
strict genomen mogen blokhaken dus niet; feit is echter dat het wel werkt :)

[ Voor 107% gewijzigd door crisp op 28-05-2003 12:50 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De naamgeving is van belang omdat deze variabele na de check als array wordt gebruikt in php. Dus ik kan die naam niet veranderen. Is er geen workaround?

[ Voor 9% gewijzigd door Verwijderd op 28-05-2003 13:29 ]


Acties:
  • 0 Henk 'm!

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 20-08 09:22

Clay

cookie erbij?

als je crisp zijn post even leest. daar staat het in.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Crisp, helaas werkt dat niet.

Ik heb:

if (document.forms['formulier'].elements['vraag[40]'].value == "")
{
alert("vul iets in");
}

en:

<form name=formulier>
<input type="radio" name="vraag[40]" value="181">
</form>

[ Voor 85% gewijzigd door Verwijderd op 28-05-2003 14:03 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Over naamgeving...

Overigens ga je ervanuit dat een groep elementen één waarde heeft. Is dat wel zo?
Ik ben bang dat je even een loop moet schrijven die alle elementen met dezelfde naam langsgaat, en een waarde returnt als de checked property true is.

JavaScript:
1
2
3
4
function check() {
   arr = document.forms['a'].elements['b'];
   for (var i = 0; i < arr.length; i++) if (arr[i].checked) return arr[i].value;
}

[ Voor 77% gewijzigd door Verwijderd op 28-05-2003 14:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cheatah. goed stukje! Ik zie dit als voorbeeld:
"
document.forms[0].elements['myFiles[' + 1 + ']'].disabled = true;

Ik doe exact hetzelfde, maar bij mij werkt het niet.

ok, ik ga dat laatste even checken. Dat is wel een goede.

[ Voor 23% gewijzigd door Verwijderd op 28-05-2003 14:15 ]


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 17:05

Eijkb

Zo.

Opmerking: Het is geen PHP maar javascript dus denk die <? en ?> effe weg...

Zit met exact hetzelfde probleem. Een formulier wordt opgemaakt met een aantal velden welke zelf ook weer als formulier dient. Dan krijg je dus het volgende:

PHP:
1
<td><select name="soort[<? echo "$i" ?>]" onChange="showInput(<? echo "$i" ?>)">


Nu is er dus een (java)script functie met de naam showInput:
PHP:
1
2
3
4
5
6
7
                     function showInput (i) {
        if (makeup.elements['soort['i']'].value=="select") {
            makeup.elements['select_options['i']'].style.display = "block";
            makeup.elements['select_options['i']'].focus(); 
            makeup.elements['select_options['i']'].select();    
        };
                     }


Dat werkt helaas niet. De variabele i wordt dus uitgelezen door een while functie van PHP en er zijn meerdere formulier regels welke dus een oplopend getal krijgen zodat ik na de submit een array heb met in dit geval soort[]... Maar omdat ik op iedere regel validatie wil toepassen....

Wat wel werkt is bv:

PHP:
1
2
3
4
5
        if (makeup.elements['soort[0]'].value=="select") {
                makeup.elements['select_options[0]'].style.display = "block";
                makeup.elements['select_options[0]'].focus();   
                makeup.elements['select_options[0]'].select();  
                };


Maar hierbij is de 0 een vaste waarde. Dus een oplossing kan zijn voor iedere regen ($i) dit script te laten herschrijven. Wordt een beetje een bende dan he, met voor iedere regel een heel stuk script....

[ Voor 42% gewijzigd door Eijkb op 29-05-2003 13:18 ]

.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

Eijkb schreef op 29 May 2003 @ 13:06:
Opmerking: Het is geen PHP maar javascript dus denk die <? en ?> effe weg...
daar hebben we [ code=js ] voor ;)

enfin, niets belet je om dit te doen:
JavaScript:
1
2
3
4
5
6
var el = document.forms['makeup'].elements['soort['+i+']'];
if (el.value == 'select') {
  el.style.display = 'block';
  el.focus();
  el.select();
}


beetje zijdelings offtopic: zelfs globale variabelen zijn te benaderen als property van het window object, dus dit werkt ook:
JavaScript:
1
2
3
var blaat17 = 'hallo';
var i = 17;
alert(window['blaat'+i]);

de meesten zouden hier dus al een eval() gebruikt hebben...

[ Voor 30% gewijzigd door crisp op 29-05-2003 13:36 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 17:05

Eijkb

Zo.

Klopt. Oplossing:

JavaScript:
1
2
3
4
5
6
7
    function hideInput (i) {
        makeup.elements['select_options['+ i +']'].style.display = "none";
        makeup.elements['radio_options['+ i +']'].style.display = "none";
        makeup.elements['check_options['+ i +']'].style.display = "none";
        makeup.elements['width['+ i +']'].style.display = "none";
        makeup.elements['height['+ i +']'].style.display = "none";
    }


Thanx, alhoewel ik het zelf al had uitgedokterd op msdn.com...

.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

Eijkb schreef op 29 May 2003 @ 13:50:
Klopt. Oplossing:

JavaScript:
1
2
3
4
5
6
7
    function hideInput (i) {
        makeup.elements['select_options['+ i +']'].style.display = "none";
        makeup.elements['radio_options['+ i +']'].style.display = "none";
        makeup.elements['check_options['+ i +']'].style.display = "none";
        makeup.elements['width['+ i +']'].style.display = "none";
        makeup.elements['height['+ i +']'].style.display = "none";
    }


Thanx, alhoewel ik het zelf al had uitgedokterd op msdn.com...
Ik zou je toch willen aanraden de handle naar je form voluit te schrijven; eventueel kan je een with(document.forms['makeup']) { gebruiken.
De reden is dat in IE een form met een name of id attribuut automatisch property van het window object is, maar in browsers als Mozilla is dit niet het geval.

Hier een link naar goede javascript references en guides: http://devedge.netscape.com/central/javascript/

[ Voor 12% gewijzigd door crisp op 29-05-2003 14:03 ]

Intentionally left blank

Pagina: 1