onsubmit van form aanpassen vanuit VB6

Status
Niet open voor verdere reacties.

JankoJuraj

Gebruiker
Lid geworden
7 jan 2022
Berichten
13
Hallo iedereen,
deze vraag is een vervolgvraag op https://www.helpmij.nl/forum/showth...oncode-van-pagina-inlezen-(liefst-met-VB-6-0)
Om de oplossing te verzenden wil ik het onsubmit-event van een form aanpassen.
Onderstaande code (in VB6) toont wat ik bedoel:
Code:
Public Sub main()
Dim objMyIE As Object
    Set objMyIE = CreateObject("InternetExplorer.Application")
    With objMyIE
        .Visible = True
        .Navigate "---mijn-URL---"
        Do While .Busy Or .readyState <> 4
            DoEvents
        Loop
        .Document.getElementById("txtNaam").Value = "Mijn Naam"
'        .Document.getElementById("frmData").onsubmit = ""
        Debug.Print .Document.getElementById("frmData").onsubmit
    End With
End Sub
Als ik deze code run, krijg ik netjes de functie te zien in het debugwindow.
Met de commentregel terug aan, krijg ik altijd Null.
Ik heb ook al vanalles geprobeerd in plaats van de lege string, maar geen resultaat...
 
Ik heb nog wat geknutseld aan dit probleem, en ben weer een (klein) stapje verder geraakt.

In mijn test-omgeving gebruik ik onderstaande HTML-pagina (form.htm):
HTML:
<html>
    <head>
        <script type="text/javascript">
            function F1(){alert("OK 1")}
            function F2(){alert("OK 2")}
        </script>
    </head>
    <body>
        <form method='post' action='readData.php' id='frmData' onsubmit='F1()'>
            Name: <input type='text' id='txtName' value='---name---'>
            <input type='submit' id='btnSubmit' value='Submit'>
        </form>
    </body>
</html>
en dit is mijn VB6-code:
Code:
Public Sub main()
Dim objMyIE As Object
Dim objMyOnsubmit As Object
    Set objMyIE = CreateObject("InternetExplorer.Application")
    With objMyIE
        .Visible = True
        .Navigate "......./form.htm"
        Do While .Busy Or .readyState <> 4
            DoEvents
        Loop
        Set objMyOnsubmit = .Document.getElementById("frmData").onsubmit
        Set .Document.getElementById("frmData").onsubmit = objMyOnsubmit
        Debug.Print .Document.getElementById("frmData").onsubmit
    End With
End Sub
In dit voorbeeld wordt de onsubmit-clausule van de form vervangen door... euhm... zichzelf...
Op deze manier krijg ik wel netjes de onsubmit-clausule te zien in het debugwindow.
Eender welke andere vervanging geeft tot nu toe steeds Null.
En het is uiteraard de bedoeling dat
onsubmit='F1()'
gewijzigd wordt in
onsubmit='F2()'

Iemand een idee hoe ik objMyOnsubmit op een geldige manier kan bewerken voor ik het terug in de form plaats?
 
Tegenwoordig gebruikt men geen onclick, onsubmit, enzovoort meer omdat dit niet onderhoudsvriendelijk is.
Voor performance worden scripts onderaan, vlak boven </body> gezet, daar ziet het script alle html elementen op de pagina.
Dit alles bij elkaar geeft bijvoorbeeld
Code:
<!doctype html>
<html>
<head>
<title>Mijn formulier</title>
</head>
<body>

<form method="post" action="readData.php" id="frmData">
    Name: <input name="txtName" id="txtName" type="text" placeholder="---name---" value="">
    <input type="submit" id="btnSubmit" value="Versturen">
</form>

<script>
const formulier = document.getElementById("frmData");
formulier.addEventListener("submit", function(event) {
    event.preventDefault();
    alert (formulier.txtName.value);
});
</script>

</body>
</html>

De preventDefault() zorgt ervoor dat de 'submit' wordt onderbroken en je iets met de gegevens van het formulier kan doen.


Ik ben geen VB6 kenner. Op internet zie ik dit, ik weet niet of het werkt.
Code:
Dim doc As HTMLDocument  ' Microsoft HTML Object Library
Set doc = New HTMLDocument
Dim elmColl As IHTMLElementCollection
Set elmColl = doc.getElementById("frmData")
MsgBox elmColl.txtName.value
 
Laatst bewerkt:
Hoi bron,
Leuke stukjes code. Ga ik zeker een paar nuttige dingen van overnemen.
Tegenwoordig gebruikt men geen onclick, onsubmit, enzovoort meer omdat dit niet onderhoudsvriendelijk is...[/code]
Jammer genoeg heb ik die form niet in eigen handen...
In mijn eerste bericht verwees ik naar dit draadje waar ik uitleg wat ik met deze vraag wil bereiken.
Ik herhaal het even beknopt... Ik maak een robot-solver voor de puzzels op deze pagina. (ja, dat is daar toegestaan;)).

Het lukt mij ondertussen om de onsubmit van twee aparte forms in één pagina te swappen.
Als die twee forms zich ook in aparte pagina's bevinden lukt dat nog niet.
 
Met this in F1(this) stuur je de gegevens van het formulier dat je gebruikt naar de functie.
Dan heb je 1 functie voor meerdere formulieren. De id moet wel altijd uniek zijn.
Ik weet niet of je dit bedoelt :confused:
Code:
<form method="post" action="readData.php" id="frmData_1" onsubmit="F1(this)">
    Name: <input name="txtName" id="txtName_1" type="text" placeholder="---name---" value="">
    <input type="submit" id="btnSubmit_1" value="Versturen">
</form>

<form method="post" action="readData.php" id="frmData_2" onsubmit="F1(this)">
    Name: <input name="txtName" id="txtName_2" type="text" placeholder="---name---" value="">
    <input type="submit" id="btnSubmit_2" value="Versturen">
</form>

<script>
function F1(formulier) {
    event.preventDefault();
    alert (formulier.txtName.value);
}
</script>

Vraag: waarom wil je na het versturen naar bestand action="readData.php" ?
 
Code:
Public Sub Main3()
    sUrl = "https://www.puzzle-pipes.com/"
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate sUrl
        Do While .Busy Or .readyState <> 4
            DoEvents
        Loop
        .document.forms(0).btnready.click
        .Quit
    End With
End Sub
 
Laatst bewerkt:
@bron: die readData.php dient enkel om mijn testomgeving te laten werken.
Met die testomgeving wil ik uitzoeken hoe ik de onsubmit van een form in een bestaande pagina kan wijzigen vanuit VB6.
Als mij dat lukt, dan kan ik (hopelijk) die techniek ook toepassen op de puzzelpagina om mijn oplossing te verzenden.

@alphamax: yep, die code (ongeveer) heb je me gegeven in dat andere draadje, en werkt perfect. nogmaals bedankt daarvoor. ;)
Maar de oorspronkelijke vraag blijft...
 
Laatst bewerkt:
Ik ben nog een tijdje met dit probleem bezig geweest, maar heb niets kunnen vinden...
Ik heb nergens bevestiging kunnen vinden in HTML/javascript documentatie, maar nu ga ik er vanuit dat het (om veiligheidsreden?) niet mogelijk is de onsubmit-clausule van een form te wijzigen.
Ik ga de vraag nog even open laten. Misschien kan iemand de betreffende documentatie wel vinden, en anders zet ik de status binnen een weekje of zo op opgelost.
Iedereen alvast bedankt voor het meedenken!
 
... hoe ik de onsubmit van een form in een bestaande pagina kan wijzigen vanuit VB6.
Dit kan alleen als de eigenaar van de pagina je toegang heeft gegeven om het html bestand te overschrijven met een nieuw html bestand.
Dat nieuwe html bestand (in feite gewoon een tekstbestand) kan worden gemaakt met VB6 maar het moet wel een html of php bestand zijn.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan