jQuery:在链接#1,2和3上的mouseOver之后 - 激活show content

时间:2010-07-13 17:07:20

标签: javascript jquery

我正在研究一个复活节彩蛋,你必须在秘密泄露之前以正确的顺序激活一些链接。

我无法使用此脚本。我想我写错了,但看不出它是什么......

<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甚至没有给我一个警告..我做错了什么?

5 个答案:

答案 0 :(得分:1)

为什么使用jQuery for Javascript原语?这是非常错误的!这似乎是jQuery-itis的情况(对不起Google缓存链接) - 使用Javascript相等运算符,并且不要将StepOfThree换行进行简单的数字比较:

if (StepOfThree === 1)
{
    // do stuff
}

我的猜测是你在和jQuery同时学习Javascript,对吗?


<强>更新

好的,这就是为什么你的第二个和第三个处理程序不能按预期工作的原因:当你按照自己的方式创建一个回调时,你就是在创建一个闭包。 实际上,这会将StepOfThree的值“密封”到mouseover处理程序中,以便它们永远不会看到更新后的值。

尝试这样做:

http://jsbin.com/ovocu/6

这样,你就关闭了一个对象(如果你熟悉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