我编写了一些基本上将处理程序附加到onsubmit事件的代码,但是有一个我不知道如何解决的错误。问题是当表单中的输入字段为空时,代码进入{{ 1}}阻塞,它在return语句后不会停止,下面的ajax代码也会被执行,但是我不明白为什么?
if
答案 0 :(得分:4)
当您告诉JavaScript退出each()块而不是bind块时。处理此问题的一种方法是,如果val()为空,则在每个块期间将布尔值设置为false。每个块完成后,您可以检查布尔值并提交表单,如果它仍然是真的。请参阅下面的代码示例:
$('document').ready(function() {
$('form').bind('submit', function(event) {
var submit = true;
event.preventDefault();
$('form input').each(function() {
if( !$(this).val()) {
$(this).addClass('warning');
// this is returning out of this block
submit = false;
return false;
}
});
if (submit) {
$.ajax({
url: 'http://example.com/',
dataType: 'json',
type: 'GET',
});
}
});
});
答案 1 :(得分:0)
您将从您在each
的调用中创建的匿名函数返回。相反,你应该做这样的事情:
$('document').ready(function() {
$('form').bind('submit', function(event) {
event.preventDefault();
var has_empty = false;
$('form input').each(function() {
if( !$(this).val()) {
$(this).addClass('warning');
has_empty = true;
}
});
if(has_empty){
return;
}
$.ajax({
url: 'http://example.com/',
dataType: 'json',
type: 'GET',
});
});
});
答案 2 :(得分:0)
您正在从each
调用中使用的回调函数返回,该函数不会从事件处理程序退出。
设置变量以标记状态:
$('document').ready(function() {
$('form').bind('submit', function(event) {
event.preventDefault();
var ok = true;
$('form input').each(function() {
if( !$(this).val()) {
$(this).addClass('warning');
ok = false;
}
});
if (ok) {
$.ajax({
url: 'http://example.com/',
dataType: 'json',
type: 'GET',
});
}
});
});