Toon posts:

[VBS/HTML] Waarde in variabel input veld plaatsen

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

Verwijderd

Topicstarter
//minder interessant stukje, mag je gerust overslaan (als je geen opp bent)
Ik heb dit zojuist al gepost, maar ik kreeg er direct een slot op. Het bezwaar bleek te zijn (als ik het goed begrepen heb) de topic titel en een wat onduidelijke beschrijving.
Ik heb dan ook de links die hierbij stonden gevolgd en doorgenomen en zal mijn best doen in deze post de regels beter toe te passen.
En verder dan nog het volgende bezwaar:
Ik kan hier geen touw aan vastknopen, maar hoe dan ook lijkt me dit een McDonalds-vraag: hey dit lukt me niet wie kan het even voor me fixen.
Daarover hetvolgende:
- Als ik inderdaad deze instelling had, dan had ik uiteraard niet eerst de gehele code gestript, zodat het werkelijke probleem overblijft, want, het gehele probleem is nog een stuk groter
- Wanneer ik kijk eens gauw wta onderwerp doorblader zie ik zoveel onderwerpen met mensen die vragen hebben zoals kan dit, hoe kan dit.

Dus, even voor de duidelijkheid, ik val niemand aan (zeker geen FM's). En ik ga nu een poging doen om mijn vraagstuk heel duidelijk uit te leggen.

//einde minder interessant stukje

Daar gaat ie dan:
In een HTML file heb ik een formulier. In dit formulier staan meerdere knoppen. Wanneer er op een knop geklikt wordt, wordt er door een sub een waarde opgehaald (de tijd). In welk invoervak deze waarde ingevuld moet worden, moet bepaald worden door een parameter die ik meegeef aan de sub.
Het beste wat ik kan verzinnen staat hieronder:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="VBS">
Sub doe_clicked(field)
    myForm.field.value = time
End Sub
</script>

<form id="myForm">
    <button id="doe" language="VBS" 
        onclick='doe_clicked("een")'></button><BR>
    <button id="doe" language="VBS" 
        onclick='doe_clicked("twee")'></button><BR>
    1<input type="text" name="een"><BR>
    2<input type="text" name="twee"><BR>
</form>

De foutmelding: Object doesn't support this property or method: 'myForm.field'
Nou 'denk' ik dat het probleem is dat, het naar de property field zoekt, in plaats van de property die in de parameter staat die doorgegeven wordt aan de sub doe_clicked.

Aangezien ik geen mc Donald's vraag wil stellen, maak ik er een stelling van O-):
Het is niet mogelijk om in Visual Basic Script een variabele mee te geven aan een sub, om vervolgense deze te gebruiken om te verwijzen naar een property van een formulier.

Ik daag iedereen uit mijn stelling te weerleggen en/of met alternatieven aan te komen.

Als het voor iemand nog steeds niet helemaal duidelijk is wat ik probeer te bereiken, ben ik uiteraard bereid nog een goede poging te doen dit uit te leggen.

*zo is ie toch netjes genoeg mijn beste FM's ;) *

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:24

gorgi_19

Kruimeltjes zijn weer op :9

Allemaal clientside, dus geef ik hem nog een schopje naar Webdesign & Graphics

>> Webdesign & Graphics

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Je hangt je stelling natuurlijk op in de volle verwachting (en hoop) dat hij onderuit geschoten gaat worden.

Nou, bij deze, zet eens

code:
1
MsgBox field


als eerste regel van je sub. Je ziet dat de parameter goed doorgegeven wordt.

Nou, aan de parameter zal het niet liggen, dus dan ligt het waarschijlijk aan het gebruik van de parameter om bij het formulier-element te komen.

Het probleem ligt 'm erin, dat als jij opschrijft "myForm.field", dat niet betekent wat jij denkt. Het betekent namelijk gewoon, "het attribuut field van het object myForm". Het betekent níet "ik heb hier een variabele field met daarin een string en geef mij nou maar eens het attribuut van myForm met dezelfde naam als mijn string". Het zou overigens best veel problemen opleveren als het dat wel betekende, want dan zou je bijvoorbeeld geen lokale variabele 'field' meer kunnen hebben als je óók ergens het attribuut field van nodig hebt (want dat wordt dan spontaan iets anders, afhankelijk van je lokale variabele) - je kunt je voorstellen dat dat niet echt fijn programmeren is.

Ik ben niet zo'n grote held in client-side scripting (en zeker niet uit mijn hoofd), maar me dunkt dat je ongeveer zoiets moet doen:

code:
1
2
3
Sub doe_clicked(field)
    myForm(field).value = time
End Sub


Ik ga even uitzoeken of dat inderdaad zo is en als dat zo is zal ik meteen uitleggen waarom ;)

edit:
Zowaar, ik had gelijk. En dan nu de wijze les, waaruit blijkt dat ik dit altijd al geweten had... :+ :-

myForm telt als een verzameling, die een aantal elementen bevat. Namelijk, de form-elementen die in het form zitten. Deze elementen hebben allemaal een naam, en deze naam is een string. Dit is ook de naam die je opgeeft met het name= attribuut.

Wat je nu kunt doen, is de verzameling myForm indexeren met een string die de naam van het element voorstelt. Je kan het indexeren gewoon voorstellen als een functieaanroep die betekent, "hey, doe mij het element met deze naam" -- en dat is precies wat je wilt!

[ Voor 31% gewijzigd door Verwijderd op 04-08-2004 14:39 ]


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
In JavaScript gebruik ik hiervoor GetElementById, hiervoor zal VBS ook wel een equivalent hebben.
code:
1
document.getElementById(field).value=time

Verwijderd

Topicstarter
Bedankt dat je meedenkt. Wanneer ik de msgbox(field) doe, zie ik inderdaad dat de parameter goed wordt doorgegeven. Qua denkwijze zitten we op dezelfde golflengte. De oplossing die je voordracht werkt alleen helaas niet...

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
  function doe_clicked(field)
  {
    datum = new Date();
    document.getElementById("myForm").elements[field].value = datum.getTime();
  }
</script>

<form id="myForm">
  <button id="doe" onclick="doe_clicked('een')" /><br />
  <button id="doe" onclick="doe_clicked('twee')" /><br />
  1 <input type="text" name="een"><br />
  2 <input type="text" name="twee"><br />
</form>

[ Voor 90% gewijzigd door André op 04-08-2004 14:40 ]


Verwijderd

Verwijderd schreef op 04 augustus 2004 @ 14:38:
Bedankt dat je meedenkt. Wanneer ik de msgbox(field) doe, zie ik inderdaad dat de parameter goed wordt doorgegeven. Qua denkwijze zitten we op dezelfde golflengte. De oplossing die je voordracht werkt alleen helaas niet...
Niet? De volgende code werkt bij mij perfect:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="VBScript">
Sub doe_clicked(field)
    myForm(field).value = time
End Sub
</script>

<form id="myForm">
    <button id="doe" language="VBS" 
        onclick='doe_clicked("een")'></button><BR>
    <button id="doe" language="VBS" 
        onclick='doe_clicked("twee")'></button><BR>
    1<input type="text" name="een"><BR>
    2<input type="text" name="twee"><BR>
</form>


Overigens is er een subtiel verschil met de getElementById oplossing:

getElementById haalt uit de DOM een DOM-element (of een verzameling elementen) terug, via de waarde van hun id attribuut. Voornaamste toepassing: DHTML, DOM manipulatie.

Deze oplossing haalt uit een form een form-element terug, via de waarde van zijn name attribuut. Oftewel, volgens de naam waaronder de gegevens ook verstuurd gaan worden naar de pagina. Deze hoeft niet gelijk te zijn aan de id waarde. Voornaamste toepassing: form scripting.

offtopic:
Klein beetje offtopic: ik zie in de aanroepen in je code en in je post dat je nogal eens haakjes gebruikt bij de aanroep van een procedure (MsgBox(field), doe_clicked("twee")). Dit hoort niet, in VB. Sterker nog, als je meerdere parameters toe gaat voegen zal 't niet meer werken, omdat je de haakjes weg hoort te laten bij de aanroep van een procedure (of sub), dus dan wordt het verkeerde syntax. Bij 1 parameter mag het wel, omdat het dan niet anders telt dan dat je prioriteitshaakjes om de eerste parameter hebt gezet. Verder hoor je wèl weer haakjes te gebruiken als je een functieaanroep pleegt. En als je een functie gebruikt zonder op het resultaat te letten (dus als een sub), moeten de haakjes weer weg.

Lang leve VB! :r

[ Voor 78% gewijzigd door Verwijderd op 04-08-2004 14:54 ]


Verwijderd

Topicstarter
Precies wat ik zoek... weet iemand of dit ook mogelijk is in vbs? Dat zou helemaal geweldig zijn!
Ik ben ondertussen al aan het googlen.
(is er niet ergens een site die waarbij ze vbs en js tegen elkaar afspiegelen?)

Verwijderd

Topicstarter
nevermind...
Heb de reactie van OneOfBorg gemist. Het werkt idd... zal wel iets fout gedaan hebben net met testen. Bedankt iedereen!

Verwijderd

Puur uit interesse, waarom eigenlijk in VBS?

Verwijderd

Topicstarter
Ik ben een uitbreiding aan het maken van een softwarepakket (e-Synergy) geschreven in ASP en VBS. Om in de dezelfde stijl te blijven gaat mijn dus voorkeur uit naar ASP en VBS. Waarbij ASP dus wel bijna een must is, maar JS zou ik dus eventueel ook kunnen gebruiken.

Verwijderd

Verwijderd schreef op 04 augustus 2004 @ 15:03:
Ik ben een uitbreiding aan het maken van een softwarepakket (e-Synergy) geschreven in ASP en VBS. Om in de dezelfde stijl te blijven gaat mijn dus voorkeur uit naar ASP en VBS. Waarbij ASP dus wel bijna een must is, maar JS zou ik dus eventueel ook kunnen gebruiken.
ok :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 augustus 2004 @ 15:03:
Ik ben een uitbreiding aan het maken van een softwarepakket (e-Synergy) geschreven in ASP en VBS. Om in de dezelfde stijl te blijven gaat mijn dus voorkeur uit naar ASP en VBS. Waarbij ASP dus wel bijna een must is, maar JS zou ik dus eventueel ook kunnen gebruiken.
:?

Erhm.. Serverside heeft weinig te maken met clientside. Waarom zou je jezelf beperkingen opleggen, terwijl dat eigenlijk niet nodig is? Right tool for the right job; veel browsers ondersteunen VBS ook niet :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
e-Synergy wordt per definitie al niet ondersteund door andere browsers dan IE.
En de oplossing in VBS was toch ook net zo goed, al dan niet beter dan de oplossing in JS
Pagina: 1