【问题标题】:Ternary statement not working三元语句不起作用
【发布时间】:2016-05-07 04:49:48
【问题描述】:
1.  document.getElementById('navButton').addEventListener('click', toggleNav);
2.  document.getElementById('menuButton').addEventListener('click', toggleMenu);
3.  function toggleNav(){
4.    document.getElementById('nav').className == 'open' ? 'closed' : 'open';
5.    document.getElementById('navButton').className == 'open' ? 'closed' : 'open';
6.  }
7.  function toggleMenu(){
8.    document.getElementById('menu').className == 'open' ? 'closed' : 'open';
9.    document.getElementById('menuButton').className == 'open' ? 'closed' : 'open';
10. }

在上面的代码中,我在第 4、5、8 和 9 行旁边收到以下错误消息:

“期待一个赋值或函数调用,但看到了一个表达式。”

我以前从未遇到过这个问题,如果我只是将document.getElementById('nav').className == 'open' ? 'closed' : 'open'; 更改为document.getElementById('nav').className = 'open';,它就可以正常工作。我做错了什么?

【问题讨论】:

    标签: javascript ternary-operator


    【解决方案1】:

    您没有将三元返回值分配给任何东西。您需要执行以下操作:

    document.getElementById('nav').className = document.getElementById('nav').className == 'open' ? 'closed' : 'open';

    这是来自MDN 的一个更容易理解的示例:

    var elvisLives = Math.PI > 4 ? "Yep" : "Nope";
        ^^^^^^^^^^   ^^^^^^^^^^^   ^^^^^   ^^^^^^^
    //  assignment    condition    expr1    expr2
    

    【讨论】:

    • 我觉得自己很笨。谢谢哈哈,我已经有一段时间没有编写任何代码了
    • 别担心!犯这个错误实际上很常见:)
    • 我强烈建议将document.getElementById("someId") 存储在一个变量中以便于访问,而不是每次都写那堵文字墙。不仅是为了易于使用,而且因为当有一个名称描述它是什么的变量时,它更容易阅读和理解。
    • @TiagoMarinho 非常真实!我用它作为一个例子,因为添加其他东西会带走任务丢失的要点。缓存引用是个好主意,尤其是在频繁使用的情况下。
    猜你喜欢
    • 2018-08-01
    • 2016-05-08
    • 2020-03-13
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多