不仅从子函数退出,而且从整个父函数退出
Posted
技术标签:
【中文标题】不仅从子函数退出,而且从整个父函数退出【英文标题】:Exit not only from child function but from whole parent function 【发布时间】:2012-03-14 08:07:11 【问题描述】:短
我想要做的是:首先,函数validate()
必须一个一个地检查所有输入:如果它们不为空(或空白)然后移动到 if 语句(用于检查单选按钮)但是如果一些输入空然后停止整个验证功能并专注于空输入。
这是结果:http://jsfiddle.net/tt13/y53tv/4/
只需按下ok
按钮,您就会看到它完成了第一个功能,如果也完成了就会触发。但是如果有空字段,我想退出整个 validate() 函数,而不仅仅是从 each() 函数
详细
JS
function validate()
$('.var_txt').each(function()
if ($.trim($(this).val()) == '')
$(this).focus();
return false;
);
if (!$(".answer:checked").val())
alert("boom");
return false;
return true;
$(document).ready(function()
$("#add_question").submit(function(e)
if (validate())
alert("good");
e.preventDefault();
)
);
HTML 标记
<form id="add_question" method="post" action="">
<table>
<tr>
<td class="var_label">
<input class="answer" type="radio" name="answer" value="a" /> a)
</td>
<td>
<input type="text" class="var_txt" name="var_a" />
</td>
</tr>
<tr>
<td class="var_label">
<input class="answer" type="radio" name="answer" value="b" /> b)
</td>
<td>
<input type="text" class="var_txt" name="var_b" />
</td>
</tr>
<tr>
<td class="var_label">
<input class="answer" type="radio" name="answer" value="c" /> c)
</td>
<td>
<input type="text" class="var_txt" name="var_c" />
</td>
</tr>
<tr>
<td class="var_label">
<input class="answer" type="radio" name="answer" value="d" /> d)
</td>
<td>
<input type="text" class="var_txt" name="var_d" />
</td>
</tr>
<tr>
<td class="var_label">
<input class="answer" type="radio" name="answer" value="e" /> e)
</td>
<td>
<input type="text" class="var_txt" name="var_e" />
</td>
</tr>
</table>
<input type="submit" name="submit" value="ok" />
</form>
【问题讨论】:
为什么不抛出错误? try validate foreach( if(not valid) throw invalid) catch (invalid) return 【参考方案1】:添加一个标志,该标志必须为 false 才能继续。
function validate()
var invalid = false;
$('.var_txt').each(function()
if ($.trim($(this).val()) == '')
$(this).focus();
invalid = true;
return false;
);
if (invalid)
return false;
if (!$(".answer:checked").val())
alert("boom");
return false;
return true;
$(document).ready(function()
$("#add_question").submit(function(e)
if (validate())
alert("good");
e.preventDefault();
)
);
【讨论】:
【参考方案2】:我们可以通过让回调函数返回 false 来在特定的迭代中打破 $.each() 循环。返回非 false 与 for 循环中的 continue 语句相同;它将立即跳到下一次迭代。
在验证开始时设置一个标志:var broken = false;
。在each
中,就在return false;
之前,添加broken = true;
。然后在您的each
代码后添加if( broken) return false;
【讨论】:
【参考方案3】:喜欢吗?
function validate()
var pass = true;
$('.var_txt').each(function()
if ($.trim($(this).val()) == '')
$(this).focus();
pass = false;
return false;
);
if (!$(".answer:checked").val())
alert("boom");
pass = false;
return false;
return pass;
添加一个检查条件是否为真的变量。
【讨论】:
以上是关于不仅从子函数退出,而且从整个父函数退出的主要内容,如果未能解决你的问题,请参考以下文章