无法在jquery中更改变量

时间:2015-07-24 18:09:58

标签: javascript jquery asynchronous

嘿,我在单击某个html元素时无法在我的javascript / 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");
  });
  }

我已经尝试过移动最初的秘密"进出$(document).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")}
  );

如果secret为false,则if / else语句的两个部分都会执行,如果它是真的,则不执行。

3 个答案:

答案 0 :(得分:4)

问题是您的点击处理程序没有被分配开始,因为secret是false。相反,分配处理程序,然后仅在secret为true时执行颜色更改:

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");
  });

答案 1 :(得分:3)

如果secret为真,您的代码将只分配点击处理程序,而不是页面加载。您可能想要的是在secret为真时更改背景颜色:

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

答案 2 :(得分:0)

仅在调用click事件处理程序时才会发生赋值secret = true;。您的测试if (secret == true)会在处理程序注册后立即发生,并且在Click事件发生之前很久就会发生。您需要将该逻辑放在一个函数中,并从您的click事件处理程序中调用它,以便它在Click事件发生后运行。