2015-07-07 2 views
0

Я работаю над созданием сценария jQuery с потоком данных, в котором для определения пути, к которому должен выполняться сценарий, используется переменная окна. Ожидается, путь, как это:переменная jQuery не оценивается как ожидалось

  • Первоначальная функция устанавливает переменную window.QuestionSelector к 0, а -1, или номер
  • значение window.QuestionSelector при 0 означает совершенно новый родительский викторины, -1 означает новый вопрос, а число означает существующий вопрос.

Это код, который вызывает функцию Вопрос

$(".questionJumpLink").click(function() { 
      //questionJumpLink will have a data-attribute attached if you're selecting a different question 

      if ($(this).attr('data-questionid')) { 
       window.QuestionSelector = $(this).attr('data-questionid'); 
       console.log("Question ID " + window.QuestionSelector + " requested"); 
      } 


      if (window.QuestionSelector == -1) { 
       console.log("New question request detected"); 
      } 

    questionFunction(); 
} 

В этом случае заявление, часть questionFunction(), срабатывает несмотря на то значение window.QuestionSelector является -1.

//Used when navigating between questions, not on initial load. QuestionSelector 
//is the QuestionID being requested. -1 can be set for a new question indicator 
if (window.QuestionSelector != 0 && window.QuestionSelector != -1) 
{ 
    console.log("Question switch, same quiz path switch"); 
    //Some code and handling, not vital 
} 

Это если заявление, непосредственно ниже выше блока кода в questionFunction(), это один я ожидаю быть вызвана:

if (window.QuestionSelector != 0 && window.QuestionSelector === -1) { 
    console.log("New question path"); 
    $("#quizQuestion").unbind(); 

    $("#quizQuestion").focusout(function() { 
    questionField(); 
    console.log("Build Answers called"); 
    buildAnswers(); 
    $("input[name^=AnswerOrder]").unbind(); 
    enableAnswerOrderSave(); 
    $("[name^=AnswerID]").unbind(); 
    autoCheckboxOnChange(); 
    $("input[id^=IsValidAnswer]").unbind(); 
    AnswerAcDeac(); 
    $("input[name^=IsCorrectAnswer]").unbind(); 
    AnswerCorrectUpdate(); 
    }) 
} 

== Going или ===, кажется, не имеет никакого значения. Я проверял в отладчике window.QuestionSelector равно -1.

+0

Используйте '.data()' для получения значений атрибутов 'data-foo', а не' .attr() ' – Pointy

+0

. Сначала я написал код таким образом, но по какой-то причине он не работал последовательно. Я отступил на прежний путь, но я согласен, что метод '.data()' является предпочтительным. – Dreamcasting

+0

Обратите внимание, что '.data()' никогда не будет обновлять атрибут DOM - он будет читать его из DOM, чтобы инициализировать карту данных jQuery, но это все. (Как правило, так вы хотите, чтобы он работал.) – Pointy

ответ

1

Проблема заключается в том, что переменная была установлена ​​в строку, которая оценивается совсем по-другому, чем int.

При объявлении переменной мне пришлось изменить код, используя функцию parseInt.

window.QuestionSelector = parseInt($(this).attr('data-questionid')); 

Тогда оценка работала, как ожидалось.

+2

Укажите параметр radix при использовании функции parseInt (см. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ParseInt). – jrubins

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