即使两个表达式都为真,如果语句被跳过

时间:2018-10-30 15:47:23

标签: javascript html

我有一个网页,其中用数组填充了一个表。它具有doClick函数,因此当用户单击单元格时,它将单元格的行和列传递给该函数。单元格示例:onclick =“ doClick(0,1)”

public class TreeNode
    {
        public int Id { get; set; }

        public int? ParentId { get; set; }
        public string Key { get; set; }
        public string Name { get; set; }
        public string Url { get; set; }
        public string Type { get; set; }
        public bool HasChildren { get; set; }
        public virtual List<TreeNode> Children { get; set; }
        public string ParentKey { get; set; }
    }

。问题是,即使两个if表达式都为true,if语句也将被跳过,并将其传递给else语句。我已经对它进行了检查,并通过开发人员工具和检查值来运行它。在两个表达式上都为真的语句被跳过。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

cells[row][right].innerHTML = ""

是错误的。您缺少双(三重)=

正确的方法应该是...

cells[row][right].innerHTML === ""

答案 1 :(得分:0)

看起来您的代码中可能有一些错别字或误解。

有关IF语句中条件的简短说明(cells[top][col].innerHTML = "")这样的条件语句将始终返回true,因为这是将cells[top][col].innerHTML设置为""或至少实例化了变量。因此,测试绝对正确或错误的适当条件是(cells[top][col].innerHTML === "")。但是,您甚至可以不这样做而逃脱,只需将(cells[top][col].innerHTML = "")替换为cells[top][col].innerHTML。尽管变量尚未被实例化,但您仍可能遇到其他问题。我将后一种逻辑包装在IF语句中,以检查cells[top][col].innerHTML是否被实例化。

要解决此问题,请查看我对您的代码进行的以下修改。

function doClick(row, col)
{
    var top = row -1;
    var bottom = row +1;
    var left = col -1;
    var right = col +1;
    var swapped = false;

    if(typeof cells[top][col].innerHTML !== 'undefined' $$ cells[top][col].innerHTML !== null)
    {
        if ((top != -1) && cells[top][col].innerHTML !== '')
        {
            cells[top][col].innerHTML = cells[row][col].innerHTML;
            cells[row][col].innerHTML = "";
            swapped = true;
        }
        else if ((right != 4) && cells[row][right].innerHTML !== '')
        {
            cells[row][right].innerHTML = cells[row][col].innerHTML ;
            cells[row][col].innerHTML = "";
            swapped = true;
        }
        else if ((bottom != 4) && (cells[bottom][col].innerHTML))
        {
            cells[bottom][col].innerHTML = cells[row][col].innerHTML;
            cells[row][col].innerHTML = "";
            swapped = true;
        }
        else
        {   
            alert("Illegal Move.");
        }
    }
    else if (typeof cells[row][left].inn !== 'undefined' && (left != -1) && cells[row][left].inn !== '')
    {  
        cells[row][lef].innerHTML = cells[row][col].innerHTML;
        cells[row][col].innerHTML = "";
        swapped = true;
    }
    else
    {   
        alert("Illegal Move.");
    }
}

用于演示上述代码的示例

var testVar1 = '';
var testVar2 = 'Hello';
// var testVar3; <- Left this un-instantiated to test existance

// Testing if a var is empty but exists
if(typeof testVar1 !== 'undefined' && testVar1 !== null){
    if(testVar1 !== ''){
        alert('testVar1 has a value!');
    }{
        alert('testVar1 does not have a value!');
    }
}
// Testing if a var is empty but exists
if(typeof testVar2 !== 'undefined' && testVar2 !== null){
    if(testVar2 !== ''){
        if(testVar2 === 'Hello'){
            alert('testVar2 has a value! Value: ' + testVar2);
        }{
            alert('testVar2 has a value but it is not the one we expected.');
        }
    }{
        alert('testVar2 does not have a value!');
    }
}
// Test existance
if(typeof testVar3 !== 'undefined' && testVar3 !== null){
    alert('testVar3 exists!');
}else{
    alert('testVar3 does not exist!');
}