Toon posts:

[Javascript] fout bij dynamische velden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende code:

code:
1
2
3
4
5
<td bordercolor="#FFFFFF"><span class="style10"><input type="text" name="textfield<%=i %>" id="textfield<%=i %>"></span><a href="javascript:cal<%=i %>.popup();"><img src="Images/calender.gif" width="16" height="16" border="0" align="absmiddle" /></a>

<script>
var cal<%=i %> = new calendar1(document.forms['del_act'].elements['textfield<%=i %>']);
</script></td>


Hiermee bouw ik een aantal record op met een tekstveld en een calendercontrol.
Het eerste record gaat goed (maakt niet uit of ik i op 1 of 2 of wat dan ook laat beginnen).
Vanaf het 2e record krijg ik de melding:

document.forms.del_act.textfield1is leeg of geen object.
In html ziet het er volgens mij goed uit. Wat kan hier mis zijn?

  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

Het kan zijn dat het element nog niet gerenderd is waardoor je die foutmelding krijgt. Je zult dus zeker moeten weten dat het element aan de DOM toegevoegd is.

Verwijderd

Topicstarter
André schreef op vrijdag 04 augustus 2006 @ 11:16:
Het kan zijn dat het element nog niet gerenderd is waardoor je die foutmelding krijgt. Je zult dus zeker moeten weten dat het element aan de DOM toegevoegd is.
Ehh, ik ben niet echt een java topper. Hoe kan ik ervoor zorgen dat het element aan de DOM toegevoegd is?

  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

Je hoeft ook geen java topper te zijn om javascript te kunnen ;)

Je zult een check moeten inbouwen die controlleerd of je input al gerenderd is. Maar misschien is het handiger om de calenders pas toe te voegen na de onload van je body.

Verwijderd

Topicstarter
André schreef op vrijdag 04 augustus 2006 @ 11:49:
Je hoeft ook geen java topper te zijn om javascript te kunnen ;)

Je zult een check moeten inbouwen die controlleerd of je input al gerenderd is. Maar misschien is het handiger om de calenders pas toe te voegen na de onload van je body.
Toch zie ik nog niet helemaal hoe ik dat kan doen. in de href roep ik de functie aan die specifiek verwijst naar deze functieaanroep. En iedere href heeft zijn eigen functieaanroep dus waar moet ik die functieaanroepen dan defineren?

Verwijderd

Ik zit met precies hetzelfde probleem. Heeft iemand een suggestie?

Verwijderd

Is het niet efficienter om die calender pas aan te maken op het moment dat je op de button clicked. Scheelt dat niet veel geheugen ook?

Dus gewoon een <a href="#" onclick="launchCalendar(document.forms['del_act'].elements['textfield<%=i %>']);">

En dan in je launchCalendar functie een nieuwe calender opstarten en de popup eruit gooien.

-r-

Verwijderd

Verwijderd schreef op zondag 06 augustus 2006 @ 12:38:
Is het niet efficienter om die calender pas aan te maken op het moment dat je op de button clicked. Scheelt dat niet veel geheugen ook?

Dus gewoon een <a href="#" onclick="launchCalendar(document.forms['del_act'].elements['textfield<%=i %>']);">

En dan in je launchCalendar functie een nieuwe calender opstarten en de popup eruit gooien.

-r-
Ah, dat klinkt inderdaad wel heel logisch. Ga ik eens mee aan de slag. Thanks....

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:16

crisp

Devver

Pixelated

sommige browsers renderen tables pas als de </table> langs is gekomen, tot dan kan je dus elementen binnen je table nog niet aanspreken.

Intentionally left blank


  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Een simpele window.onload moet dat toch kunnen oplossen als je de initialisatie direct wil, zonder dat de gebruiker op een knop moet rammen.
JavaScript:
1
window.onload = function();

[ Voor 29% gewijzigd door Rowanov op 06-08-2006 12:59 ]


Verwijderd

Topicstarter
Rowanov schreef op zondag 06 augustus 2006 @ 12:58:
Een simpele window.onload moet dat toch kunnen oplossen als je de initialisatie direct wil, zonder dat de gebruiker op een knop moet rammen.
JavaScript:
1
window.onload = function();
Maar dan ga ik dus de initialisatie van de functie direct doen terwijl de argumenten op dat moment nog niet bestaan???? Toch?

Verwijderd

Topicstarter
Verwijderd schreef op zondag 06 augustus 2006 @ 12:38:
Is het niet efficienter om die calender pas aan te maken op het moment dat je op de button clicked. Scheelt dat niet veel geheugen ook?

Dus gewoon een <a href="#" onclick="launchCalendar(document.forms['del_act'].elements['textfield<%=i %>']);">

En dan in je launchCalendar functie een nieuwe calender opstarten en de popup eruit gooien.

-r-
Ik probeer bovenstaande ook even maar zodra ik de functie aanroep krijg ik weer de melding:
document.forms.del_act.textfield1is leeg of geen object Terwijl de functie dus nu echt bij de onclick pas aangeroepen wordt.

Verwijderd

Je zou kunnen gaan debuggen op welk stuk van je document.forms.del_act.textfield1 hij hangt. Kan je bijvoorbeeld wel document.forms.del_act.name via een alert eruit gooien?

Als alternatief kan je document.getElementById('textfield<%=i%>'); gebruiken denk ik, aangezien je toch elk veld een eigen id geeft.

  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Verwijderd schreef op maandag 07 augustus 2006 @ 07:40:
Maar dan ga ik dus de initialisatie van de functie direct doen terwijl de argumenten op dat moment nog niet bestaan???? Toch?
Nee, je hangt een onload aan je pagina. Dat houdt in dat de funtie die daar staat wordt uitgevoerd als de pagina geladen is.
Pagina: 1