覚えておくべきことがいくつかあります。
1.フォームを送信する方法はいくつかあります
- 送信ボタンを使用する
- Enterキーを押す
- JavaScriptで送信イベントをトリガーする
- デバイスまたは将来のデバイスに依存する可能性があります。
したがって、ボタンクリックイベントではなく、フォーム送信イベントにバインドする必要があります。これにより、現在および将来のすべてのデバイスと支援技術でコードが機能するようになります。
2. Hijax
ユーザーがJavaScriptを有効にしていない可能性があります。hijaxのパターンは、私たちは優しくJavaScriptを使用して、フォームのコントロールを取るが、JavaScriptが失敗した場合submittableそれを残す場合は、ここで良いです。
フォームからURLとメソッドをプルする必要があるため、HTMLが変更された場合でも、JavaScriptを更新する必要はありません。
3.邪魔にならないJavaScript
falseを返す代わりにevent.preventDefault()を使用すると、イベントが発生しやすくなるので、良い方法です。これにより、ユーザーインタラクションを監視している分析スクリプトなど、他のスクリプトをイベントに結び付けることができます。
速度
スクリプトをインラインで挿入するのではなく、外部スクリプトを使用するのが理想的です。ページのヘッドセクションでスクリプトタグを使用してリンクするか、ページ下部にリンクしてスピードを上げることができます。スクリプトは、邪魔にならないように静かにユーザーエクスペリエンスを向上させる必要があります。
コード
上記のすべてに同意し、送信イベントをキャッチし、AJAX(hijaxパターン)を介して処理したい場合、次のようなことができます。
$(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...
});
});
});
次のようなものを使用して、JavaScript経由でいつでも手動でフォーム送信をトリガーできます。
$(function() {
$('form.my_form').trigger('submit');
});
編集:
私は最近これをしなければならず、結局プラグインを書いてしまいました。
(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)
data-autosubmit属性をフォームタグに追加すると、次のようになります。
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});