2014-10-14 6 views
0

Я делаю таблицу, которая вызывает следующий метод, когда изменяется значение, но метод обновления умирает часть в случае, если переменная stuntSet установлена ​​на «все»Если оператор остановку для цикла

Когда я звоню updateStunts, если stuntSet установлен на «all», он никогда не выходит из цикла for. Когда он настроен на что-либо еще, он работает нормально и переходит на вызов countStuntRefresh(). Странная часть состоит в том, что он завершает весь код внутри оператора if, который проверяет, является ли stuntSet === "all", но он никогда не достигает вызова для countStuntRefresh();

Я прохожу через это в течение часа, и я не могу найти свою ошибку. Прошу прощения, если это простая ошибка, и я ценю любую помощь, которую вы можете дать.

http://jsbin.com/nicoruvamula/1/ ссылка на полный код

var selected = false; 
var updateStunts = function() { 
    for (var i = 0; i < character.stunts.length; i++) { 
     if (stuntSet === "all") { 
      selected = document.getElementById("select" + character.stunts[i].name).checked; 
      character.stunts[i].chosen = selected; 
     } else if(stuntSet === character.stunts[i].category) { 
      selected = document.getElementById("select" + character.stunts[i].name).checked; 
      character.stunts[i].chosen = selected; 
     } 
    } 
    countStuntRefresh(); 
}; 

var countStuntRefresh = function() { 

    character.spentRefresh = 0; 
    for(var i = 0; i <character.stunts.length; i++){ 
     if (character.stunts[i].chosen) { 
      character.spentRefresh += character.stunts[i].cost; 
     } 
     document.getElementById("stunttest").innerHTML = "Spent Refresh:" + character.spentRefresh; 
    } 
}; 
+0

Что точка если утверждение, если они оба делают одно и то же? –

+0

^Вернее, это эквивалентно: 'if (stuntSet ===" all "|| stuntSet === character.stunts [i] .category)'. – Vinay

+0

Я, вероятно, должен был использовать || между двумя. Существует много разных категорий, и это должно было ограничивать, какой характер повлияли на выбранные свойства. –

ответ

0

Когда я запускаю код jsbin, есть несколько исключений, потому что document.getElementById("select" + character.stunts[i].name) возвращает нулевое значение.

Просмотрев код, я заметил, что вы не ждете события DOM-ready. Как вы уже, включая JQuery, вы пробовали оборачивать код в

$(function() { /* your code*/ }); 

(или будет jsbin автомагически вызвать ваш код в OnLoad или DOMReady? Не знакомы с jsbin ...)

+0

Причина возврата нулевого значения (или, скорее, неопределенного) заключается в идентификаторах: ''. Вероятно, идентификатор должен быть одним «словом», например «selectCorner-of-My-Eye». – Paul

+0

Я попробую ID. Я не понимаю, когда я помещаю stuntSet в Alertness, «Corner of My Eye» отлично работает. Он перестает работать, если для параметра stuntSet установлено значение All. Я не понимаю, зачем работать, а другой - нет. –

+0

Пол это сработало! Это были не пробелы, вызывающие проблему, но некоторые из идентификаторов имели апостроф, и это закрывало их. Вот почему он работал над группами с пробелами, но не мог пройти весь список. Я использовал линию замены, чтобы удалить апостроф, и он отлично работал. –

Смежные вопросы