【问题标题】:Javascript, code jumps into the if else statement when it's supposed to be trueJavascript,当它应该为真时,代码会跳转到 if else 语句
【发布时间】:2015-10-24 01:06:55
【问题描述】:

好的,现在情况是这样,我正在开发一个 css3 滑入和滑出菜单系统。

我不得不使用 JavaScript,所以我开始使用它。这是菜单的工作原理: 主页面我有一个 div 有很多子 div(视频)和一个偷偷摸摸的隐藏 iframe,现在当有人访问我网站上的另一个页面时,主 div 转到 z:-100 并得到 opacity:0 和 iframe 出现并像魔术一样滑下来。

但我想更进一步,如果他转到其他页面,我希望已经向前加载的 iframe 上下滑动。现在那部分不起作用。警报用于分析目的,这是(可能)有问题的部分:

function betolt(el, frame) {
    var elem = document.getElementById(el);
    var keret = document.getElementById(frame);
    if (elem.style.opacity == 1) {
        elem.style.transition = "zIndex 0.3s linear 0s";
        elem.style.zIndex = "-1000";
        elem.style.transition = "opacity 0.5s ease-out 0s";
        elem.style.opacity = 0;



        keret.style.transition = "opacity 0.4s ease-in 0.2s";

        keret.style.opacity = 1;
        keret.style.transition = "zIndex 0.5s linear 0.4s";

        keret.style.zIndex = "100";
        keret.style.transition = "height 0.4s linear 0.5s";

        keret.style.height = "100%";

        keret.style.width = "100%";
        alert("done with the first part boss");


    } else if (elem.style.opacity == 0) {
        alert("i made it through");
        keret.style.transition = "height 0.5s linear 0s";
        keret.style.height = "0px";

        keret.style.transition = "height 0.5s linear 1s";

        keret.style.height = "100%";

    }

}

这个不在这个阶段的代码甚至没有跳到第一个 if 语句。 它仅在我注释掉 else if 部分并像这样使用 if 时才有效:

if(elem.style.opacity ="1"){....}

但我认为这是不对的。

【问题讨论】:

  • 为什么不在if 语句之前插入console.log(elem.style.opacity) 以查看实际值是多少?
  • if(elem.style.opacity ="1"){....} 始终为真,因为您正在进行分配。你的代码真的是这样说的吗?
  • 在第二个语句中,您将 elem.style.opacity 设置为 1。看起来您缺少一个 = 符号。
  • 第二个语句只是我如何使它工作的一个例子,点类似于代码的其余部分。 @pointy我不知道那个东西存在。试试看。

标签: javascript jquery html css iframe


【解决方案1】:

此声明:

if(elem.style.opacity ="1"){....}

将始终评估为真,因为“1”是假的,或者不是零。它将值“1”分配给 elem.style.opacity。

if(elem.style.opacity=="1"){....}

如果 elem.style.opacity 为“1”,则为真,并且不会改变 elem.style.opacity 的值。

【讨论】:

  • 这是个误会,先生。我输入该代码是为了说代码第一部分只有在我按照您引用的方式声明 if 时才有效。它的 : .... 类似于代码的其余部分
  • 你有 === 吗?第一个是赋值,第二个是比较。
  • 如果我使用(正确)== 那么它甚至不会进入选择。
【解决方案2】:

style.opacity 拥有一个String 数据类型,因此当您将测试从== 1 更改为== "1" 时它是否有效(我在这里将= "1" 视为错字)是有意义的。它还可以保存两个字符串“initial”或“inherit”,您可能会检查它们是否都出错了,甚至可能是undefined

尽管使用== 应该不会有什么不同,但引擎不应该在这里进行自动转换吗? BTW:IE 8 及更低版本不支持opacity

【讨论】:

  • 我试图把它当作一个字符串来处理,所以我把它放在 " 之间但仍然不起作用。
【解决方案3】:

我发现opacity 问题不大,所以我选择了zIndex 它确实一直通过if 仍然需要做一些修补,但我想我能够做到。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2019-04-09
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多