不仅从子函数退出,而且从整个父函数退出

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;

添加一个检查条件是否为真的变量。

【讨论】:

以上是关于不仅从子函数退出,而且从整个父函数退出的主要内容,如果未能解决你的问题,请参考以下文章

进程退出

PHP仅从函数内部退出当前包含的脚本文件

c#在不退出子线程的情况下将值从子线程传递给父线程

从C中的主函数返回与退出[重复]

c语言 退出整个程序或函数的命令是啥

即使从父组件传递函数后也无法从子组件更改状态