2015-07-24 3 views
0

Привет, У меня возникли проблемы с переназначением переменной в моем javascript/jquery-коде при нажатии на определенный элемент html, это действительно?Изменение переменных в jQuery

var secret = false; /* assigning boolean */ 

    $('#facebook2').click(function() { /*reassigning "secret" to true on click*/ 
     secret = true; 
     $('#link-secret').attr('id', 'link-secret2'); 
    }); 


if (secret == true) { /* should only work if "secret" is true */ 
    $("#twitter2").click(function(){ 
    $("body").css("background-color","yellow"); 
    }); 
    } 

Я попытался переместить первоначальный «секретный» значение в и из $ (документ) .ready теги безрезультатно. Я пропустил что-то очень очевидное здесь?

Спасибо за любую помощь.

Редактировать: Спасибо за быстрый ответ, может ли кто-нибудь объяснить, почему эта часть моего кода не работает?

$("#link-secret").hover(function() { 
     $(".top-left-circle").addClass("circle-dupe"); 
     $("#speech-bubble1, #speech-bubble2, #speech-bubblex, #speech-bubblex2, #speech-arrow").hide("250"); 


     if (secret == false){ 
      setTimeout(function() { 
       $("#speech-bubblex, #speech-arrow").stop().show("slow"); 
      }, 500); 
     } else { 
      setTimeout(function() { 
       $("#speech-bubblex2, #speech-arrow").stop().show("slow"); 
      }, 500); 
     } 

     setTimeout(function() { 
      $("#speech-bubblex, speech-bubblex2, #speech-arrow").hide(2000); 
     }, 5000); 
    }, 

    function() { 
    $(".top-left-circle").removeClass("circle-dupe")} 
); 

Если секрет является ложным, выполняются обе части инструкции if/else, и если это так, то и нет.

ответ

4

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

var secret = false; /* assigning boolean */ 

    $('#facebook2').click(function() { /*reassigning "secret" to true on click*/ 
     secret = true; 
     $('#link-secret').attr('id', 'link-secret2'); 
    }); 


    $("#twitter2").click(function(){ 
    if (secret == true) 
     $("body").css("background-color","yellow"); 
    }); 
+0

Да. Проблема состояла в том, что условие оценивает один раз на готовке документа и определяет назначение обработчика кликов, а не определяет изменение цвета фона. – moarboilerplate

+0

Этот ответ был бы лучше, если бы вы объяснили, что не так, и почему ваше изменение исправляет его. – forgivenson

+0

@forgivenson alley-oop – moarboilerplate

3

Вы код только назначить обработчик щелчка, если secret правда, что это не на странице загрузки. То, что вы, вероятно, хотите, чтобы изменить цвет фона, когда secret верно:

$("#twitter2").click(function(){ 
    if(secret) { $("body").css("background-color","yellow"); } 
    }); 
0

Назначение secret = true; происходит только тогда, когда обработчик события нажатия называется. Ваш тест if (secret == true) происходит сразу после регистрации обработчика и задолго до события клика. Вам нужно поместить эту логику в функцию и вызвать ее из обработчика события клика, чтобы он запускался после события щелчка.

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