Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jquery中更改变量时遇到问题_Javascript_Jquery_Asynchronous - Fatal编程技术网

Javascript 在jquery中更改变量时遇到问题

Javascript 在jquery中更改变量时遇到问题,javascript,jquery,asynchronous,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');

嘿,在单击某个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");
  });
  }
我已尝试将初始“secret”值移入和移出$(文档)。就绪标记无效。我是不是错过了一些很明显的东西

谢谢你的帮助

编辑:谢谢你的快速回答,有人能解释一下为什么我的这部分代码不起作用吗

$( "#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语句的两部分都将执行,如果为true,则两部分都不会执行。

问题在于,由于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");
  });

只有当
secret
为true时,代码才会分配单击处理程序,而页面加载中没有该处理程序。当
secret
为true时,您可能需要更改背景色:

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

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

Yep。问题是,条件是在文档准备就绪时进行一次评估,并确定单击处理程序的分配,而不是确定背景颜色的更改。如果您解释了错误所在以及更改修复的原因,这个答案会更好。@creditenson-alley-oop