2013-04-11 14 views
6

Robię aplikacji internetowej, która używa przesłania jquery, aby zażądać niektórych danych, ale nie chcę, aby ludzie złożyli formularz wiele razy po przesłaniu za pierwszym razem. Więc chcę po przesłaniu, że następne zgłoszenie nic nie robi przez kilka sekund.jQuery formularz przesłać, uniemożliwić wysyłanie wiele razy po pierwszym przesłać

$("#updatestock_form").submit(function(e){ 

    // requesting my data.. 


}); 

Jak mogę to osiągnąć?

+0

Można usunąć lub wyłączyć przycisk Prześlij, lub można użyć flagi, aby sprawdzić, czy formularz został już wysłał – Uby

Odpowiedz

8

"Tak więc chcę po przesłaniu, że następne zgłoszenie nic nie robi przez kilka sekund."

Jeśli masz na myśli, że chcesz złożyć drugie i kolejne próby użytkownika mają być ignorowane, aż po pewnej liczbie sekund można to zrobić na kilka sposobów. Oto pierwszy, który przyszedł mi do głowy:

var allowSubmit = true; 
$("#updatestock_form").submit(function(e){ 
    if (!allowSubmit) return false; 
    allowSubmit = false; 
    setTimeout(function(){ allowSubmit = true; }, 5000); 

    // your existing submit code here 
    // requesting my data.. 
}); 

Oznacza to, że flaga wskazuje, czy przesyłanie jest obecnie dozwolone. W przypadku zdarzenia submit, jeśli ta flaga jest fałszywa, natychmiast zwróć false natychmiast, aby anulować zdarzenie submit. W przeciwnym razie (jeśli jest to obecnie true) ustaw flagę na false, ustaw limit czasu, aby zmienić flagę za, powiedzmy, 5 sekund, a następnie kontynuuj z istniejącym kodem do przesłania.

+0

Dziękuję, tego właśnie szukałem! – Edwin

2
$("#updatestock_form").submit(function(e){ 
    $(this).unbind("submit") 
    $("#submitButton").attr("disabled", "disabled") 
}); 

Bardzo prosta.

+0

i przez kilka sekund dodaj linię dla 'setTimeout' –

+0

Właściwie to nie zadziała, wystarczy, że usuniesz program nasłuchujący jQuery, a nie zablokujesz' formularza' przed przesłaniem – Uby

0

Wykonujesz prośbę o przesłanie ajax-a? Utwórz więc pewną zmienną blokującą var locked; i ustaw ją na locked = true; po przesłaniu i zresetowaniu do false po zakończeniu wywołania ajax. (powodzenie-warunek)

0

Wyłącz przycisk zdarzeniu onclick przycisku

$("#buttonId").bind('click', function() { $(this).attr("disabled", "disabled"); }); 

i usunąć wyłączoną atrybut po udanej operacji

Powiązane problemy