Aklınızda bulundurmanız gereken birkaç şey var.
1. Form göndermenin birkaç yolu vardır
- gönder düğmesini kullanma
- enter tuşuna basarak
- JavaScript'te bir gönderme etkinliğini tetikleyerek
- muhtemelen cihaza veya gelecekteki cihaza bağlı olarak.
Bu nedenle düğme tıklama etkinliğine değil, form gönderme etkinliğine bağlanmalıyız . Bu, kodumuzun şimdi ve gelecekte tüm cihazlarda ve yardımcı teknolojilerde çalışmasını sağlayacaktır.
2. Hijax
Kullanıcının JavaScript'i etkinleştirmemiş olabilir. Bir hijax kalıbı burada iyidir, burada JavaScript kullanarak formun kontrolünü nazikçe kontrol ederiz, ancak JavaScript başarısız olursa gönderilebilir bırakın.
URL ve yöntemi formdan almalıyız, bu nedenle HTML değişirse JavaScript'i güncellememiz gerekmez.
3. Göze batmayan JavaScript
Return false yerine event.preventDefault () yöntemini kullanmak, etkinliğin patlamasına izin verdiği için iyi bir uygulamadır. Bu, diğer komut dosyalarının etkinliğe bağlanmasına olanak tanır; örneğin, kullanıcı etkileşimlerini izliyor olabilecek analitik komut dosyaları.
hız
İdeal olarak komut dosyamızı satır içine eklemek yerine harici bir komut dosyası kullanmalıyız. Buna bir komut dosyası etiketi kullanarak sayfanın baş bölümünde veya hız için sayfanın alt kısmına bağlantı verebiliriz. Komut dosyası, sessizce kullanıcı deneyimini geliştirmeli, engellememelidir.
kod
Yukarıdakilerin tümünü kabul ettiğinizi ve gönderme etkinliğini yakalamak ve AJAX (hijax kalıbı) ile işlemek istediğinizi varsayarsak, şöyle bir şey yapabilirsiniz:
$(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...
});
});
});
Bir form gönderimini JavaScript aracılığıyla istediğiniz zaman manuel olarak tetikleyebilirsiniz:
$(function() {
$('form.my_form').trigger('submit');
});
Düzenle:
Son zamanlarda bunu yapmak zorunda kaldım ve bir eklenti yazdım.
(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)
Form etiketinize bir veri otomatik gönderme özelliği ekleyin; ardından bunu yapabilirsiniz:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});