React.js: Das Formular wird programmgesteuert nicht beim Ereignis onSubmit ausgelöst

8

Ich möchte ein Reagieren-Formular nach einem Klick auf einen Link senden.

Dazu muss ich das Formular programmgesteuert senden, wenn auf den Link geklickt wird.

Mein Problem ist: onSubmit handler wird nach dem Senden des Formulars nicht ausgelöst.

Hier ist ein Code, den ich für diesen Zweck erstellt habe:

%Vor%

Das handleSubmit wird nicht aufgerufen und das Standardverhalten wird ausgeführt (das Formular wird gesendet). Ist das ein ReactJs Bug oder ein normales Verhalten? Gibt es eine Möglichkeit, den onSubmit-Handler aufzurufen, der aufgerufen wird?

    
Ahmed Kooli 18.06.2016, 20:13
quelle

4 Antworten

1

Ihr aktuelles onSubmit ist an das Auslösen eines SyntheticEvent gebunden und nicht an das natives Formular senden Ereignis. Das erklärt, warum this.refs.formToSubmit.submit(); Ihren Handler nicht auslöst. Soweit ich weiß, ist der Versuch, dieses SyntheticEvent manuell auszulösen, keine empfehlenswerte oder lohnende Aufgabe.

Ich glaube, der idiomatische Weg, dies zu erreichen, besteht darin, JSX / HTML so zu strukturieren, dass ein <button> oder <input> vom Typ submit verwendet wird. Jede davon löst Ihren handleSubmit -Handler aus. Meiner Meinung nach wird es die Komplexität reduzieren, Ihre Handler konsolidieren und scheint die beste Lösung zu sein.

z.B.

  • <input type="submit" value="Validate" />
  • <button type="submit">Validate</button>
Matt Kahl 22.03.2017 20:10
quelle
0

Ich hatte das gleiche Problem, konnte es aber nicht beheben. Egal was ich getan habe,% document.querySelector('form').submit() würde den onSubmit Handler nicht auslösen. Ich habe versucht, ein unsichtbares <input type="submit"> einzufügen, aber trotzdem .submit() würde es nicht auslösen. Also habe ich mich einfach dazu entschieden, das unsichtbare submit ( style="display:none" ) zu behalten und dann .click() auf dem unsichtbaren Submit-Button zu machen, überraschend funktioniert das sogar mit display:none . Ich habe allerdings nur in Firefox getestet.

    
Noitidart 01.03.2017 09:33
quelle
0

Sie sollten nicht erwarten, dass ein Formularreferex für Sie standardmäßig einen zusätzlichen Callback an submit anfügt. Dies wäre ein schlechtes Design des Frameworks beim Arbeiten mit programmgesteuerten Dingen wie dem DOM-Element refs .

Sie sollten die ref verwenden, um alle gewünschten Ereignisse in beliebiger Reihenfolge zu instanziieren, anstatt sich auf eine nicht angegebene interne Implementierung von ref [bei der Instanzierung durch form element] zu verlassen.

Das funktioniert:

%Vor%

Actual submit sollte immer zuletzt vorkommen.

    
Denialos 27.08.2017 08:15
quelle
-1

Sie sollten das Eingabe-Tag mit dem Typ "submit" anstelle des Anchor-Tags verwenden, da das Anchor-Tag kein Submit-Ereignis auslöst.

%Vor%

}

    
Sanu Uthaiah Bollera 18.06.2016 22:14
quelle

Tags und Links