[JAVA] Wenn sich dies mit der Option disable_with in Safari nicht ändert

Wenn Sie ein Formular mit Rails erstellen, können Sie die doppelte Übermittlung verhindern, indem Sie der Übermittlungsschaltfläche die Option disable_with hinzufügen.

= f.button 'Senden', data: { disable_with: 'Senden…' }

Nur in Safari hat sich der Wortlaut der Schaltfläche aus irgendeinem Grund nicht geändert. Es gibt viele Berichte über GitHub. disable_with doesn't work with link in Safari #306

Lösung

Um aus der Schlussfolgerung zu schreiben, konnte ich den Ansturm vermeiden, indem ich den Übertragungsprozess mit JS absichtlich verzögerte. Ein in Vanilla JS geschriebenes Beispiel wird in der Ausgabe angezeigt. Wenn Sie also jQuery nicht verwenden, ist es möglicherweise schneller, darauf zu verweisen.

= f.button 'Senden', data: { disable_with: 'Senden…' }, class: 'disable_with_safari'
$('.disable-with-safari').click(function (event) {
  if ($(this).data('disableWith')) {
    $(this).prop('disabled', true);
    $(this).text($(this).data('disableWith'));
    var form = $(this).closest('form');
    if (form.length) {
      event.preventDefault();
      setTimeout(() => form.submit(), 300);
    }
  }
});

Bemerkungen

Wie in der Eröffnungsausgabe erläutert, scheinen die einzigartigen Spezifikationen von Safari zu verhindern, dass das DOM aktualisiert wird, sobald eine Übermittlung ausgeführt wurde. (Da es sich um einen Kommentar zum Problem handelt, finden Sie die genauen Spezifikationen in den primären Informationen.) Selbst wenn disable_with hinzugefügt wurde, hat sich der Wortlaut der Schaltfläche daher nicht geändert.

Übrigens, als ich nach diesem Problem gesucht habe, kam die folgende Lösung heraus, aber in meinem Fall hat es nicht funktioniert.

Recommended Posts

Wenn sich dies mit der Option disable_with in Safari nicht ändert
Es funktioniert nicht, wenn der Map-Schlüssel ein Array ist
Es reagiert nicht auf die Beschreibung in .js der Packs-Datei
Was tun, wenn die Validierung mit der Aktualisierungsaktion nicht funktioniert?
Was tun, wenn die Rails-Seite im Rails-Lernprogramm 1.3.2 nicht angezeigt wird?
Mit CSS in die Mitte legen
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
Wenn Sie Probleme mit dem Zeichencode-Problem in Myanmar (Burmesisch) haben
Ändern Sie das Layout beim Drehen mit onConfigurationChanged
Holen Sie sich Youtube-Videoinformationen mit Retrofit und behalten Sie sie in der Android-App.