Остальное утверждение не выполнено javascript - PullRequest
0 голосов
/ 28 февраля 2012

Эй, парни в приведенном ниже коде каждый раз, когда выполняется оператор 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') равен нулю, я получаю ошибку:

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

Но у меня уже есть оператор else, если элемент имеет значение null

Ответы [ 5 ]

2 голосов
/ 28 февраля 2012

Вот почему я люблю йодные условия. Вы присваиваете значение (=), а не оцениваете его ==.


РЕДАКТИРОВАТЬ Как предполагается, я могу указать, что порядок проверок в этом конкретном утверждении является неправильным. Проверка того, существует ли элемент #select_degree, должна происходить естественным образом перед попыткой изменить его свойства.

Однако , учитывая, что элемент существует, условие все равно всегда будет иметь значение true, поскольку возвращаемое значение присваивания (=) используется в качестве аргумента. Как сторонник условных выражений yoda, могу ли я указать на их преимущество: для следующего утверждения возникла бы синтаксическая ошибка:

if ('hidden' = element.style.visibility)
{
// ...
}
2 голосов
/ 28 февраля 2012

Ваш оператор 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 голос
/ 28 февраля 2012

в вашем операторе if:

'=' should be '==' for starters

then:

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

вы проверяете свойство перед проверкой, является ли оно нулевым, если вы переключаете их вокруг, программа сначала проверяет нулевое свойствои, если это так, переходите к другому, и не проверяет второе условие.

в этом случае, даже если оно нулевое, оно получит доступ к .style.visibility

0 голосов
/ 28 февраля 2012

Сначала проверьте нулевое условие, это основной закон, если что-то присутствует, затем продолжайте, так как в вашем случае, если элемент отсутствует, он выдаст неопределенное и ничего не будет работать. даже заменить = на == в скрытой части

0 голосов
/ 28 февраля 2012

style.visibility = 'hidden' -> 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;
     }
  }             
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...