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语句
答案 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)
:
'=' 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并且什么都不会起作用。甚至在隐藏部分中替换= = ==