web-dev-qa-db-fra.com

Rails data-disable-with re-enabled button

J'ai un Rails Formulaire de conception qui a une validation javascript. Lorsque l'utilisateur appuie sur soumettre, la validation fonctionne et l'utilisateur est recentré sur le formulaire où il doit être.

Cependant, Rails utilise le data-disable-with pour désactiver le bouton après avoir été cliqué, donc après la validation, l'utilisateur ne peut plus cliquer sur soumettre. J'essaie de configurer une sorte d'écouteur pour vérifier que le bouton a été désactivé, attendez un peu pour éviter les doubles clics, puis réactivez le bouton.

J'ai essayé de nombreuses itérations de code, la dernière que j'ai essayée était:

      $(document.on("ajax:success", "new_supplier", function() {
      var button;

      button = $(this).find('.btn-sign-up');
      setTimeout((function() { return button.disabled=false; }),1);


      });

Mais sans succès, auparavant, j'essayais simplement d'ajouter un écouteur au bouton:

      var button = document.getElementById('btn-sign-up');
      button.addEventListener("click", enableButton);

      function enableButton() {
          if (button.disabled)
          {
              window.setTimeout(enable(), 2000);
          }
      }


      function enable() {
          button.disabled=false;
      }

Mais cela a échoué car il s'exécutait avant la fonction (cachée dans Rails éther) qui a désactivé le bouton et n'a donc pas fonctionné.

Mon bouton d'envoi est simple:

    <%= f.submit "Create my account", class: 'btn-sign-up', id: 'btn-sign-up' %>

Est-ce que quelqu'un pourrait m'aider? Je pense que si je peux désactiver les jQuery_ujs pour cette page, cela fonctionnerait, mais je ne sais pas si je peux le faire.

23
Ryan Murphy

J'ai réussi à résoudre cela tout simplement. Je suis juste entré et j'ai supprimé le data-disable-with du bouton avec le code:

    $('#my-button').removeAttr('data-disable-with');

Et puis en rétablissant l'attribut lorsque le formulaire était prêt à être envoyé pour empêcher les doubles-clics de créer des doublons.

0
Ryan Murphy

Ce comportement a été modifié dans Rails 5, maintenant il désactive les soumissions par défaut.

Plutôt qu'une réponse acceptée, je suggérerais d'utiliser la configuration suivante:

config.action_view.automatically_disable_submit_tag = false

ou, pour le faire ad-hoc pour des boutons spécifiques, ajoutez ceci au bouton soumettre

data: { disable_with: false }
62
macav

Cela a été utile pour me donner un indice sur ce qu'il faut rechercher. Si quelqu'un cherche comment corriger cela dans votre fichier html.erb, c'était ma solution:

<p>
  <%= f.submit 'Submit', data: { disable_with: false } %>
</p>
10
jasmineq

Regardez ma réponse.

$button = $('#someId')
$.Rails.enableElement($button)
$button.removeAttr('disabled')

https://stackoverflow.com/a/44318786/4349494

6
waqas ali