別の回答に関する私のコメントで述べたように:
「有効」と「無効」はどちらも「送信」によってトリガーされるため、これは「無効」イベントによる AJAX の実行を停止しません。その結果、上記の関数は「submit」によって呼び出され、フォームが無効であっても AJAX 呼び出しが行われます。
少し変更するだけで、そのコードは機能します。
$("#myForm").on("valid invalid submit", function(g){
g.stopPropagation();
g.preventDefault();
if (g.type === "valid"){
// AJAX call
}
});
これは、Abide 検証イベントを回避するハックな方法ですが、ライブラリがこのシナリオをより適切に処理できるようになるまでは、うまくいくでしょう。
- アップデート -
元の質問は Foundation 4 に適用されました。Foundation 5+ は、このシナリオをより適切に処理しているようです。
「submit イベントを自分で処理するには、form タグ内
でdata-abideの代わりにdata- abide="ajax"を使用してください。」
<form data-abide="ajax">
<div class="name-field">
<label>Your name <small>required</small>
<input type="text" name="users_name" required pattern="[a-zA-Z]+">
</label>
<small class="error">Name is required and must be a string.</small>
</div>
<button type="submit">Submit</button>
</form>
$('input[name="users_name"]').on('valid', function() {
// Handle the submission of the form
});
私は v4 以降 Abide を使用していないため、この更新を認識していませんでした。