正如我对另一个答案的评论所述:
这不会阻止“无效”事件执行 AJAX,因为“有效”和“无效”都是由“提交”触发的。结果是上面的函数被“提交”调用了,即使表单无效,也会进行AJAX调用。
稍加修改,该代码就可以工作:
$("#myForm").on("valid invalid submit", function(g){
g.stopPropagation();
g.preventDefault();
if (g.type === "valid"){
// AJAX call
}
});
这是围绕 Abide 验证事件的一种 hacky 方式,但它对我有用,直到库为这种情况提供更好的处理。
- 更新 -
适用于 Foundation 4 的原始问题。Foundation 5+ 似乎更好地处理了这种情况:
“要自己处理提交事件,请在表单标签内
使用data-abide="ajax"而不是data-abide 。”
<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,所以不知道这个更新。