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
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);
}
}
});
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