嘿,我在单击某个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语句的两个部分都会执行,如果它是真的,则不执行。
答案 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事件发生后运行。