0

我对堆栈溢出和从头开始使用 jQuery 都是新手,所以请原谅我的任何不正确的格式(或完全省略代码)以及明显以次充好的编码实践。

我在这里编制一个投资组合: Question answered, link removed

如果您尝试单击导航中的链接,则会出现fadeOut>fadeIn 效果解析。在 Portal 和 About 之间,链接工作得很好,但是如果您单击 Journal、Resources 或 Contact,文本会中断并且在离开它们时无法淡出。

我可以替换单个 div 的 innerHTML,但我更喜欢使用这种格式来交换内容。谁能告诉我为什么它适用于前两个链接,但在我对它们进行相同编码时会中断其他三个链接?

4

4 回答 4

2

我不确定这是否能解决您的问题,但我注意到您所有的条件检查都使用单个等号而不是双(甚至更好,三倍!)等号。

尝试从此更改所有条件:

else if (about=true)

对此:

else if (about===true)

编辑:在浏览 javascript 之后,我注意到你有很多不必要的冗余代码。我已经在 jsfiddle 上写了一个小演示,希望能帮助你大大减少你的代码。

http://jsfiddle.net/FdeM9/

$('a').on('click', function () {
    var clickedDiv = this;
    var visibleDiv = $('div:visible');
    var divToShow = $('div').eq(parseInt(clickedDiv.innerHTML)-1);

    if (visibleDiv[0] === divToShow[0]) {
        return;
    }

    visibleDiv.fadeOut(500, function () {
        divToShow.fadeIn(500);
    });
});​
于 2012-07-26T17:35:55.043 回答
2

您应该==在 if 语句中使用双等号进行比较。

于 2012-07-26T17:36:09.603 回答
1

您将赋值运算符(=)与比较运算符(== 或 === 用于类型比较)混淆了。

由于您的条件是从布尔变量中读取的,因此您可以执行以下操作:

如果(条件){

}

您的脚本标签也缺少类型属性。

此外,您应该将这些事件绑定调用封装在一个函数中,并将该函数附加到 onReady(jQuery(document).ready) 事件。

在全局变量中也是邪恶的(或者至少应该避免)。查看您的代码,您似乎打算使用这些全局标志来启用或禁用某些菜单项?为什么不首先控制这些菜单项的呈现,这样您就不需要全局变量了。

于 2012-07-26T17:40:41.613 回答
0

最简单和最干净的方法是给所有菜单项一类让我们说“菜单”

然后用这个

$(".menu").click(function () {
    $(".menu").fadeOut().delay(500);
    $(this).fadeIn();
}
于 2012-07-26T17:39:26.353 回答