[JAVA] Si cela ne change pas avec l'option disable_with dans Safari

Lors de la création d'un formulaire avec Rails, vous pouvez empêcher la double soumission en ajoutant l'option disable_with au bouton d'envoi.

= f.button 'Envoyer', data: { disable_with: 'Envoi en cours…' }

Cependant, uniquement dans Safari, le libellé du bouton n'a pas changé pour une raison quelconque. Il existe de nombreux rapports sur GitHub. disable_with doesn't work with link in Safari #306

Solution

Pour écrire à partir de la conclusion, j'ai pu éviter la précipitation en retardant délibérément le processus de transmission avec JS. Un exemple écrit en Vanilla JS apparaîtra dans le problème, donc si vous n'utilisez pas jQuery, il peut être plus rapide d'y faire référence.

= f.button 'Envoyer', data: { disable_with: 'Envoi en cours…' }, 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);
    }
  }
});

Remarques

Comme indiqué dans le numéro d'ouverture, les spécifications uniques de Safari semblent empêcher le DOM d'être mis à jour une fois qu'une soumission a été exécutée. (Puisqu'il s'agit d'un commentaire sur le problème, veuillez vous référer aux informations principales pour les spécifications exactes.) Par conséquent, même si disable_with a été ajouté, le libellé du bouton n'a pas changé.

Au fait, lorsque j'ai recherché ce problème, la solution suivante est apparue, mais dans mon cas, cela n'a pas fonctionné.

--Ajouter un curseur: pointeur; --Définir un événement de clic vide --Définir un événement touchstart vide

Recommended Posts

Si cela ne change pas avec l'option disable_with dans Safari
Cela ne fonctionne pas si la clé Map est un tableau
Il ne répond pas à la description en .js du fichier packs
Que faire lorsque la validation ne fonctionne pas avec l'action de mise à jour
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
Placer au milieu avec css
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
Si vous rencontrez des problèmes avec le problème de code de caractère du Myanmar (birman)
Changer la disposition lors de la rotation avec onConfigurationChanged
Obtenez des informations vidéo YouTube avec Retrofit et conservez-les dans l'application Android.