我正在研究一个复活节彩蛋,你必须在秘密泄露之前以正确的顺序激活一些链接。
我无法使用此脚本。我想我写错了,但看不出它是什么......
<script>
$(document).ready(function() {
$('#show').hide();
var StepOfThree = 0;
alert(StepOfThree);
$('#linkone').mouseover(function() {
StepOfThree = 1;
alert(StepOfThree);
});
$('#linktwo').mouseover(function() {
if (StepOfThree1 === 1) {
StepOfThree = 2;
alert(StepOfThree);
} else {
StepOfThree = 0;
alert(StepOfThree);
}
});
$('#linkthree').mouseover(function() {
if (StepOfThree1 === 2) {
$('#show').show();
alert(StepOfThree);
} else {
StepOfThree = 0;
alert(StepOfThree);
}
});
});
</script>
<a href="#" id="linkone">Link #1</a>
<a href="#" id="linktwo">Link #2</a>
<a href="#" id="linkthree">Link #3</a>
<div id="show">This is hidden content</div>
#linkTwo和#linkThree上的mouseOver甚至没有给我一个警告..我做错了什么?
答案 0 :(得分:1)
为什么使用jQuery for Javascript原语?这是非常错误的!这似乎是jQuery-itis的情况(对不起Google缓存链接) - 使用Javascript相等运算符,并且不要将StepOfThree
换行进行简单的数字比较:
if (StepOfThree === 1)
{
// do stuff
}
我的猜测是你在和jQuery同时学习Javascript,对吗?
<强>更新强>
好的,这就是为什么你的第二个和第三个处理程序不能按预期工作的原因:当你按照自己的方式创建一个回调时,你就是在创建一个闭包。 实际上,这会将 StepOfThree
的值“密封”到mouseover
处理程序中,以便它们永远不会看到更新后的值。
尝试这样做:
这样,你就关闭了一个对象(如果你熟悉C / C ++ / Java,那就是“引用”或“指针”)而不是数字本身的原始值击>
Some good reading on Javascript closures
更新2:以获取最简单的工作示例,以下是Daniel必须提供的内容(来自以下评论):http://jsbin.com/iluse3
无需传递对象。很抱歉这造成了任何混乱!
答案 1 :(得分:0)
为什么不使用内置运算符来检查等价? is
方法用于测试jQuery对象上的选择器,而不是测试常规对象或变量的等效性。
而不是:
if ($(StepOfThree).is(1))
使用:
if (StepOfThree === 1) {
答案 2 :(得分:0)
您需要移除 vars
<script>
$(document).ready(function() {
$('#show').hide();
var StepOfThree = 0;
$('#linkone').mouseover(function() {
StepOfThree = 1;
});
$('#linktwo').mouseover(function() {
if (StepOfThree == 1) {
StepOfThree = 2;
} else {
StepOfThree = 0;
}
});
$('#linkthree').mouseover(function() {
if (StepOfThree == 2 ) {
$('#show').show();
} else {
StepOfThree = 0;
}
});
});
</script>
你包括jquery吧?
答案 3 :(得分:0)
您已重新声明您的变量,覆盖其范围。
...
var StepOfThree = 0;
$('#linkone').mouseover(function() {
var StepOfThree = 1;
});
...
有两个变量,都名为'StepOfThree'。要修复,除了第一个声明之外,除去“var”。
答案 4 :(得分:0)
发生的事情是你的StepOfThree变量不是全局的 - 它在你的$(document).ready函数中。在外面声明: 脚本打开标记 var StepOfThree = 0; $(文件).ready stuff