2015-05-29 2 views
1

Я искал и искал и ничего не нашел, что объясняет, что мне нужно.jquery/ajax - отключить кнопку отправки в любой форме в течение 3 секунд после нажатия

У меня есть веб-сайт, который имеет десятки форм повсюду. Мне нужно отключить кнопку отправки в течение 3 секунд после нажатия на любую форму независимо от того, какой идентификатор, класс или действие формы.

Я нашел следующий код:

$('#btn').click(function(){ 
    var btn = $(this); 
    $.post('http://someurl.com',{delay: 3}).complete(function(){ 
btn.prop('disabled', false); 
    }); 
btn.prop('disabled', true); 

}); 

, но это требует форма иметь идентификатор БТН и, как представляется, требуется форма будет «размещена» в какой-то странице.

Есть ли способ достичь этого во всех формах, независимо от выполняемого действия? Поэтому, если его форма регистрации, она отключает кнопку «join» в течение 3 секунд, если она имеет форму комментария, она в равной степени отключает отправку в течение 3 секунд после отправки комментария, ... в основном независимо от того, какую форму или действие я хочу для отключения кнопки отправки в течение 3 секунд после нажатия.

Возможно ли это?

Я попытался изменить все экземпляры «#btn» на «input», но это, похоже, не работает. Я на самом деле не очень хорош в этом, но, похоже, справляется с ситуацией с помощью других.

Причина, по которой мой вопрос НЕ является дубликатом других вопросов, заключается в том, что я конкретно заявил «независимо от того, какой идентификатор, класс или действие формы». Решения, представленные по другому вопросу, конкретно не затрагивают этого. Добавление id, классов или подобных приложений не является удаленной возможностью на веб-сайте с сотнями и сотнями форм по разным причинам (сценарий для социальных сетей). Решение, которое я назвал правильным, - это решение, которое не требует добавления каких-либо атрибутов в элементы html. .

+1

Дубликат с этим постом: http://stackoverflow.com/questions/10932766/disable-the-submit-button-after-clicking-and-enable-it-back-again-after-a-few-se – Sherlock

+0

и я объяснил, почему сейчас это не дубликат :) – Bruce

ответ

5

Попробуйте это (псевдо-код, изменять по мере необходимости):

$('#mybutton').on('click', function() { 
    $('[type="submit"]').prop('disabled', true); 
    setTimeout(function() { 
     $('[type="submit"]').prop('disabled', false); 
    }, 3000); // 3 seconds 
}); 
+0

, который отлично работает. :) – Bruce

+0

@Bruce, приятно знать, что это помогает, ура! –

+1

Просто хочу упомянуть, что это предотвращало любые функции отправки в моей форме, пока я не добавил 'setTimeout'' 1ms' при отключении кнопки. – joshkrz

1

Почему просто не связывать отдельное событие для добавления инвалидов с задержкой? Вы можете сохранить свою логику щелчка для публикации. Просто присвойте приведенный ниже код элементу контейнера или даже телу и дайте все кнопки, которые вы хотите повлиять на класс .mybutton (или что-то еще).

$('.container').on('click', '.mybutton', function(event) { 
    setTimeout(function(){ 
    $(this).attr("disabled", false); 
    }, 3000); 
    $(this).attr("disabled", true); 
}); 

Если вы хотите инвалид для переключения в зависимости от «полных» событий для каждого вызова, вы должны создать прототип функцию с параметрами, которые могут быть назначены для каждой кнопки. Вышеуказанное с задержкой 3 секунды.

Смежные вопросы