其他声明没有执行javascript

时间:2012-02-28 14:10:21

标签: javascript if-statement

每次if语句执行时,无论条件是什么,都会在下面的代码中嘿嘿。

function addRow(tableID) {

            var table = document.getElementById(tableID);
            if((document.getElementById('select_degree').style.visibility = 'hidden')&&(document.getElementById('select_degree')!=null)){
              document.getElementById('select_degree').style.visibility = 'visible';
              document.getElementById('select_ratings').style.visibility  = 'visible';
             }

            else{ 
            var rowCount = table.rows.length;
            var new_row = table.rows[rowCount-1];  


            var row = table.insertRow(rowCount);


            var colCount = table.rows[0].cells.length;




            for(var i=0; i<colCount; i++) {

                var newcell = row.insertCell(i);


                newcell.innerHTML = new_row.cells[i].innerHTML;
            }
           }             
        }

当document.getelementById('add_degree')为null时,我收到错误:

document.getElementById("select_degree") is null
addRow(tableID="add_degree")

但是如果元素为null,我已经有了一个else语句

5 个答案:

答案 0 :(得分:2)

您的if语句未使用正确的运算符。将=(用于分配)替换为比较运算符:==。此外,在尝试检查元素属性之前,必须检查元素是否存在。如果不这样做,当元素不存在时,您将获得异常。

以下是您的代码,已更正并清理过:

function addRow(tableID) {
    var objSelectDegree = document.getElementById('select_degree');
    if (objSelectDegree != null && objSelectDegree.style.visibility == 'hidden') {
        objSelectDegree.style.visibility = 'visible';
        document.getElementById('select_ratings').style.visibility = 'visible';
    }
    else {
        // Moved table var to else block - it was not used unless else was hit
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var new_row = table.rows[rowCount - 1];
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;

        for (var i = 0; i < colCount; i++) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = new_row.cells[i].innerHTML;
        }
    }
}​

答案 1 :(得分:2)

这就是我爱yoda条件的原因。您要分配一个值(=)而不是评估它==


编辑正如所建议的,我可能会指出此特定声明中的检查顺序是错误的。检查元素#select_degree是否存在应该在尝试修改其属性之前自然发生。

然而,如果元素存在,条件仍将始终评估为true,因为赋值(=)的返回值用作参数。作为yoda条件的提倡者,我可以指出它们的优势:对于以下语句,会引发语法错误:

if ('hidden' = element.style.visibility)
{
// ...
}

答案 2 :(得分:1)

你的if语句中的

'=' should be '==' for starters

然后:

(document.getElementById('select_degree').style.visibility == 'hidden')
&&
(document.getElementById('select_degree')!=null)

你检查一个属性,然后检查它是否为null,如果你在程序周围切换它将首先检查null,如果是,则删除到else,检查第二个条件。 / p>

在这种情况下,即使它为null,也会访问.style.visibility

答案 3 :(得分:0)

style.visibility = 'hidden' - &gt; style.visibility == 'hidden'

<CODE>
function addRow(tableID) {

   var table = document.getElementById(tableID);
   if((document.getElementById('select_degree').style.visibility == 'hidden') && (document.getElementById('select_degree')!=null)){
     document.getElementById('select_degree').style.visibility = 'visible';
     document.getElementById('select_ratings').style.visibility  = 'visible';
   }

   else{ 
     var rowCount = table.rows.length;
     var new_row = table.rows[rowCount-1];
     var row = table.insertRow(rowCount);                
     var colCount = table.rows[0].cells.length;

     for(var i=0; i<colCount; i++) {     
       var newcell = row.insertCell(i);                    
       newcell.innerHTML = new_row.cells[i].innerHTML;
     }
  }             
}

答案 4 :(得分:0)

首先检查空状态,这是基本法,如果存在某些东西然后继续进行,就像在你的情况下如果元素不存在它会抛出undefined并且什么都不会起作用。甚至在隐藏部分中替换= = ==