Rails data-disable-with с кнопкой повторного включения
У меня есть форма Rails Devise, которая имеет проверку JavaScript. Когда пользователь нажимает "Отправить", проверка работает, и пользователь переориентируется на форму, в которой он должен находиться.
Однако rails использует data-disable-with, чтобы отключить кнопку после ее нажатия, поэтому после проверки пользователь больше не может нажимать кнопку отправки. Я пытаюсь настроить своего рода слушателя для проверки, когда кнопка была отключена, немного подождать, чтобы избежать двойного щелчка, а затем снова включить кнопку.
Я пробовал много итераций кода, последняя попытка была:
$(document.on("ajax:success", "new_supplier", function() {
var button;
button = $(this).find('.btn-sign-up');
setTimeout((function() { return button.disabled=false; }),1);
});
Но безуспешно, раньше я пытался просто добавить слушателя к кнопке:
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;
}
Но это не удалось, потому что он работал до функции (скрытой в rails ether), которая отключала кнопку, поэтому не работала.
Моя кнопка отправки проста:
<%= f.submit "Create my account", class: 'btn-sign-up', id: 'btn-sign-up' %>
Может кто-нибудь помочь мне здесь? Я думаю, что если я смогу отключить jQuery_ujs для этой страницы, это будет работать, но не уверен, смогу ли я это сделать.
4 ответа
Мне удалось решить это довольно просто. Я просто вошел и удалил data-disable-with из кнопки с кодом:
$('#my-button').removeAttr('data-disable-with');
А затем восстановить атрибут, когда форма была готова к отправке, чтобы избежать двойного щелчка при создании дубликатов.
Это поведение было изменено в Rails 5, теперь он отключает отправку по умолчанию.
Вместо принятого ответа я бы предложил использовать следующую конфигурацию:
config.action_view.automatically_disable_submit_tag = false
или, чтобы сделать это специально для определенных кнопок, добавьте это к кнопке отправки
data: { disable_with: false }
Это было полезно, чтобы дать мне подсказку о том, что искать. Если кто-то ищет, как исправить это в файле html.erb, это было мое решение:
<p>
<%= f.submit 'Submit', data: { disable_with: false } %>
</p>
Посмотри на мой ответ.
$button = $('#someId')
$.rails.enableElement($button)
$button.removeAttr('disabled')