Jest kilka rzeczy, o których należy pamiętać.
1. Istnieje kilka sposobów przesłania formularza
- za pomocą przycisku wysyłania
- naciskając Enter
- przez wywołanie zdarzenia przesłania w JavaScript
- ewentualnie więcej w zależności od urządzenia lub przyszłego urządzenia.
Powinniśmy zatem powiązać zdarzenie przesłania formularza , a nie zdarzenie kliknięcia przycisku. Dzięki temu nasz kod będzie działał na wszystkich urządzeniach i technologiach pomocniczych teraz iw przyszłości.
2. Hijax
Użytkownik może nie mieć włączonej obsługi JavaScript. Hijax wzór jest dobry tutaj, gdzie delikatnie przejąć kontrolę nad formularza przy użyciu JavaScript, ale pozostawić submittable jeśli JavaScript nie powiedzie się.
Powinniśmy pobrać adres URL i metodę z formularza, więc jeśli zmieni się HTML, nie musimy aktualizować JavaScript.
3. Dyskretny JavaScript
Używanie event.preventDefault () zamiast zwracać false jest dobrą praktyką, ponieważ pozwala na bąbelkowanie zdarzenia. Pozwala to innym skryptom powiązać się ze zdarzeniem, na przykład skryptom analitycznym, które mogą monitorować interakcje użytkownika.
Prędkość
Idealnie powinniśmy użyć zewnętrznego skryptu, zamiast wstawiać skrypt bezpośrednio. Możemy połączyć się z tym linkiem w sekcji nagłówka strony, używając tagu skryptu, lub link do niego u dołu strony, aby przyspieszyć. Skrypt powinien po cichu poprawić wrażenia użytkownika, a nie przeszkadzać.
Kod
Zakładając, że zgadzasz się z powyższym i chcesz złapać zdarzenie przesyłania i obsłużyć je za pomocą AJAX (wzór hijax), możesz zrobić coś takiego:
$(function() {
$('form.my_form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
Możesz ręcznie uruchomić wysyłanie formularza w dowolnym momencie za pomocą JavaScript, używając czegoś takiego:
$(function() {
$('form.my_form').trigger('submit');
});
Edytować:
Niedawno musiałem to zrobić i ostatecznie napisałem wtyczkę.
(function($) {
$.fn.autosubmit = function() {
this.submit(function(event) {
event.preventDefault();
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
return this;
}
})(jQuery)
Dodaj atrybut data-autosubmit do tagu formularza, a następnie możesz to zrobić:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});