javascript - Jquery switch 语句偶尔会起作用

标签 javascript jquery colors jquery-animate switch-statement

我对编写自己的 jquery 函数很陌生,我发现调试它非常困难,因为将错误消息放入 google 时并没有太大帮助。

我有一个用于页面 anchor 的导航菜单,当单击每个 anchor 时,屏幕将滚动到 anchor ,元素将根据哪个元素改变颜色,悬停颜色也会改变。我认为真的很简单。

滚动总是有效,动画偶尔有效,悬停通常有效我必须点击链接两次。返回 false 仅适用于您点击的第一个链接。

这使用了 scrollTo 和 animate-colors 插件。

谁能告诉我我做错了什么?

$(".scrolltoanchor").click(function() {
                                $('a').removeClass('selected');
                                $(this).addClass('selected');
        $.scrollTo($($(this).attr("href")), {
            duration: 750
        });

        switch ($(this).attr("id")) {
            case 'personal':
            $('.scrolltoanchor').animate({color: '#E4D8B8'});
            $(".scrolltoanchor").hover(
            function() {
            $(this).css('color', 'blue');
            },function(){
            $(this).css('color', '#E4D8B8');
            });
            break;

            case 'achievements':
            $('.scrolltoanchor').animate({color: '#ffffff'});
            $(".scrolltoanchor").hover(
            function() {
            $(this).css('color', 'red');
            },function(){
            $(this).css('color', '#ffffff');
            });
            break;

            case 'skills':
            $('.scrolltoanchor').animate({color: '#dddddd'});
            $(".scrolltoanchor").hover(
            function() {
            $(this).css('color', 'orange');
            },function(){
            $(this).css('color', '#ffffff');
            });
            break;


        }

        return false;
    });

很抱歉要求被灌输,但我已经遵循了我认为是我所学知识的正确语法。有什么我应该知道的事情会像我预期的那样停止工作吗?

编辑:抱歉我忘了,我在(平均)每点击一次 scrolltoanchor 链接时就会收到此错误

未捕获的类型错误:无法读取未定义的属性“0”

我无法发现真正的模式。有时它似乎只发生在以前没有被点击过的那些上,有时则不会。 谢谢

最佳答案

您采用了错误的方法。

您应该绑定(bind)一次悬停处理程序,并根据单击的事件决定颜色。

最简单的方法可能是将颜色数据存储在查找表中,其中的键是元素的 ID。

var ids = {
    personal: {
        over:'blue',
        out:'#E4D8B8'
    },
    achievements: {
        over:'red',
        out:'#ffffff'
    },
    skills: {
        over:'orange',
        out:'#dddddd'
    }
};
var current = ids.personal;

然后绑定(bind)一次处理程序,并使用被点击的id设置current颜色集。

var scroll_anchors = $(".scrolltoanchor");

scroll_anchors.hover( function() {
    $(this).css( 'color', current.over );
},function(){
    $(this).css( 'color', current.out );
});

scroll_anchors.click(function() {
     $('a.selected').removeClass('selected');
     $(this).addClass('selected');

     $.scrollTo($($(this).attr("href")), { duration: 750 });

     current = ids[ this.id ]; // set the current color set based on the ID

     scroll_anchors.animate({ color: current.out });

     return false;
});

关于javascript - Jquery switch 语句偶尔会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439731/

相关文章:

actionscript-3 - 颜色库 AS3

javascript - 在 jQuery 中将一些项目附加到一个 div,并将其余的附加到另一个 div

javascript - 通过下拉菜单设置 SVG 元素的样式

javascript - Ionic 2 - 使用参数在页面之间导航(空白应用程序)

javascript - 如何在 typescript 组件中调用 javascript 警报

Javascript:将 HSV 转换为 RGB,输出正确但已打乱

javascript - 我想从后端渲染动态内容,该内容在 React Native 中具有 html 标签

jquery - 具有平滑位置转换的绝对中心

javascript - 重新加载网页后如何在 JavaScript 中保留多个表单值?

css - Chrome 和 Safari 中的显示颜色不同