[JS] form.elements['<veldnaam>'] in Internet Explorer 8

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo.

Mijn vraag is: wordt het gebruik van form.elements['<veldnaam'] in Internet Explorer 8 nog ondersteund? Ik heb een script dat prima werkt in IE7, maar in IE8 lijkt er toch een probleem.

De code die het probleem illustreert:
JavaScript:
1
2
3
4
5
6
7
8
if ( !(form.elements['act']) ) {
  for ( var i = 0; i < form.elements.length; i++ ) {
    alert(form.elements[i].name);
  }
  return false;
}
form.elements['act'].value = 'nieuwe waarde';
return true;


Uiteraard werkt dit niet as-is, het is onderdeel van een andere functie.

Maar ... waar het om gaat als form.elements['act'] niet bestaat, dan wordt de form.elements array doorlopen en ... het eerste element dat gevonden wordt heet 'act'. Rara hoe kan dat.

Daarnaast heb ik een vraag over Google. Ik wil - in mijn zoektocht over dit probleem - zoeken op "form.elements". Letterlijk dat, met de punt erin. Maar Google haalt automatisch de punt weg, wat ik ook probeer:

- "form.elements"
- "form+.elements"
- "form\.elements"
- ("form.elements")

Is er een optie om de zoekresultaten toch te beperken tot de letterlijke zoekterm?

Acties:
  • 0 Henk 'm!

  • Barleone
  • Registratie: Maart 2009
  • Laatst online: 11:51
Voor zover ik weet ondersteund Google geen regular expressions. Dat zou ze natuurlijk ook veel te veel rekenkracht kosten. Ik heb er zelf nog nooit een oplossing voor gevonden.

Tweakers.net 6 nostalgie! - Wayback Machine
Have you tried turning it off and on again?


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Je controleert of form.element['act'] equivalent is aan false (en undefined, null, 0 en "" zijn dat ook, iirc). Als je die if nou eens zo herschrijft:
JavaScript:
1
2
3
if (typeof form.elements['act'] == "undefined") {
  ...
}

Werkt het dan wel?

Zijnootje: ipv form.elements['act'] kun je ook een cleanere notatie gebruiken: form.elements.act. Die blokhaken hoef je alleen te gebruiken als de string die je daarin zet geen identifier kan zijn, of als het variabel is. Het is nml geen array, maar gewoon een object.

Nog een zijnootje: het gebruik van een framework als jQuery staat toe om je veld met een css-selector op te vragen:
JavaScript:
1
$("form input[name=act]").val("nieuwe waarde");

Prototype, YUI, Mootools en andere hebben ook dergelijke mogelijkheden. Dus als je nog wel een berg meer javascript hebt, is dat misschien het overwegen waard.

[ Voor 29% gewijzigd door _Thanatos_ op 03-07-2009 12:28 ]

日本!🎌


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
_Thanatos_ schreef op vrijdag 03 juli 2009 @ 12:23:
Je controleert of form.element['act'] equivalent is aan false (en undefined, null, 0 en "" zijn dat ook, iirc). Als je die if nou eens zo herschrijft:
JavaScript:
1
2
3
if (typeof form.elements['act'] == "undefined") {
  ...
}

Werkt het dan wel?
Had ik ook al geprobeerd ... werkt niet. Hij is namelijk ook echt undefined.
[b][message=32200640,noline]Zijnootje: ipv form.elements['act'] kun je ook een cleanere notatie gebruiken: form.elements.act. Die blokhaken hoef je alleen te gebruiken als de string die je daarin zet geen identifier kan zijn, of als het variabel is. Het is nml geen array, maar gewoon een object.
Dat zal ik nog even proberen. Kans dat dat inderdaad wel werkt.
[b][message=32200640,noline]Nog een zijnootje: het gebruik van een framework als jQuery staat toe om je veld met een css-selector op te vragen:
JavaScript:
1
$("form input[name=act]").val("nieuwe waarde");

Prototype, YUI, Mootools en andere hebben ook dergelijke mogelijkheden. Dus als je nog wel een berg meer javascript hebt, is dat misschien het overwegen waard.
Ja, zou inderdaad nog een optie zijn. Sowieso wil ik nog eens kijken naar jQuery, vooral om te zien of er snelheidswinst te halen is in AJAX requests. Tot nu toe gebruik ik mijn eigen lightweight 'framework', dat ik door de tijd heen heb opgebouwd. Voordeel daarvan is dat ik iedere regel code ken en her-en-der tweaks kan toepassen om het precies te laten doen wat ik wil.

Nadeel is natuurlijk weer dat bij een fijne nieuwe versie van Internet Explorer ineens dingen blijken te breken, waarvan ik dacht dat ze standards-compliant waren.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
form.elements werkt perfect in Internet Explorer 8. Onderstaand voorbeeld doet wat hij moet doen, in IE8. Je zal een stukje verder moeten zoeken.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<script type="text/javascript">

function checkElements ( form )
{
    if ( ! form.elements['act'] )
    {
    for ( var i = 0; i < form.elements.length; i++ )
        alert ( form.elements[i].name );
    }
}

</script>

<form action="" method="post">

    <p><input type="text" name="test" /></p>
    <p><input type="text" name="test2" /></p>

    <p><input onclick="checkElements (this.form);" type="button" value="test" /></p>

</form>

March of the Eagles