Najprostszy sposób na wyłączenie przycisku po przesłaniu formularza?

Próbowałem znaleźć „właściwy” sposób na uniknięcie podwójnego składania formularzy. Istnieje wiele pokrewnych postów na temat SO, ale żaden z nich nie trafił w moje miejsce. Dwa pytania poniżej.

Oto moja forma

<form method="POST">
    <input type="text" name="q"/>
    <button class="once-only">Send</button>
</form>

Oto moja pierwsza próba wyłączenia podwójnych zgłoszeń:

$(document).ready(function(){
    $(".once-only").click(function(){
        this.disabled = true;
        return true;
    });
});

Takie podejście zaproponowano tutaj:Wyłącz przycisk po wysłaniu za pomocą JS / Jquery. Ten post sugeruje, że element przesyłający musi być raczej wejściem niż przyciskiem, ale testowanie nie ma znaczenia. Możesz spróbować sam, używając tego skrzypce:http://jsfiddle.net/uT3hP/

Jak widać, wyłącza to przycisk, ale również uniemożliwia przesłanie formularza. W przypadkach, gdy elementem przekazującym jest przycisk i element wejściowy.

Pytanie 1: dlaczego ten program do obsługi kliknięć przestaje przesyłać formularz?

Szukając czegoś więcej znajduję to rozwiązanie (odDlaczego mój formularz nie publikuje się po wyłączeniu przycisku przesyłania, aby zapobiec podwójnemu kliknięciu?)

if($.data(this, 'clicked')){
    return false;
} else{
    $.data(this, 'clicked', true);
    return true;
}

Możesz grać tym, używając tego skrzypce:http://jsfiddle.net/uT3hP/1/

To działa, ale ...

Pytanie 2: Czy to najlepsze, co możemy zrobić?

Myślałem, że to będzie elementarna sprawa. Podejście 1 nie działa, podejście 2 ma, ale nie podoba mi się to i sens musi być prostszy.

questionAnswers(5)

yourAnswerToTheQuestion