【问题标题】:Why does the following javascript function always return true?为什么下面的javascript函数总是返回true?
【发布时间】:2012-02-06 02:43:23
【问题描述】:

我有以下函数,它总是返回 True。任何想法为什么以及如何避免它?谢谢各位。

function validateStatuses(xyx){
var umm = ugh[xyx];
var selects = $('#cont_'+ugh.xyz+' .status_select');
var codes = $('#cont_'+ugh.xyz+' .status_code');
for (var i = 0; i < selects.length; i++) {
    var value = selects[i].options[selects[i].selectedIndex].value;
    if (value == 'new'){
        for (var j = 0; j < codes.length; j++) {
            var blagh = codes[j].options[codes[j].selectedIndex].value;
            if(blagh == 13){
                $('#info_dialog').html('');
                $('#info_dialog').append("<p>You are trying to process a bill ("+bill.name+") with a STATUS of NEW and a STATUS CODE of NONE. Please correct this issue before you proceed!</p><hr />");
                $('#info_dialog').dialog({
                    buttons:{
                        Cancel: function(){
                            $(this).dialog('close');
                        }
                    }
                    });
                billCounterAdd();
                return false;
            }//end if           
        }//end for
    }else{
        return true;  //this is the problem;
    }//end if
}//end for
}//end Function

【问题讨论】:

  • 它返回true,因为在某些时候,if (value == 'new') 将条件评估为false,因此将代码流向else 分支。
  • 任何时候你必须评论一个块的关闭"}" 这通常意味着这个块太长了。
  • 题外话,但由于您似乎在使用 jQuery,您可能会查看它的 valeach 函数,这可能有助于简化代码。

标签: javascript if-statement return


【解决方案1】:

我敢说你至少有一个选择的值不是'new'。因为您已经在 else 子句中完成了 return true;,所以第一次选择的值不是 'new' 将导致函数返回 true。

看起来它确实有一个错误的返回路线(如果在开头有一个 'new' 选择并且有一个值为 13 的代码选择),但也许该测试用例没有出现在您的测试中.

就找出这样的问题有什么问题而言,没有什么比浏览代码并在体面的调试器中逐行运行更好的了。现在(终于)所有主流浏览器都内置了它们,因此您可以准确地看到正在发生的事情并检查变量等。

【讨论】:

  • 好的,先生,非常感谢大家的及时回复。看了你的描述,我脸红了。我将 return true 语句移到最后一个 For 循环之外以获得所需的效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2012-04-03
  • 2021-09-11
  • 2015-05-12
相关资源
最近更新 更多