【问题标题】:Ternary operator in jQuery eventjQuery事件中的三元运算符
【发布时间】:2015-12-15 00:36:00
【问题描述】:

我想要一个按钮来根据变量的值触发不同的功能,但是三元运算符似乎不适用于 jQuery 事件触发器。

var color = "blue";

$(document).ready(function(){

    $('#bot').on('click', ((color==="blue") ? vlu : red));

});

function vlu(event){
    alert("Because the sky is blue...");
    color = "red";
}

function red(event){
    alert("Over the blood-red river.");
}

有没有办法做到这一点?非常感谢。

【问题讨论】:

  • 你需要把它包在一个闭包里......
  • 您的确切代码适用于我在 OSX 上的 Chrome 45.0.2454.93 中:jsfiddle.net/nuwwqju2
  • 呃,又一个奇怪的例子,谢谢 Christian Varga,我没有在 Chrome 中检查。

标签: javascript jquery ternary-operator


【解决方案1】:

你需要使用闭包

$('#bot').on('click', ( function() { 
    if (color==="blue") vlu();
    else red();
);

您可以使用三元运算符,但没有多大意义。似乎很奇怪,您只是没有将逻辑放在启动方法中。

【讨论】:

    【解决方案2】:

    你需要把它包装成一个闭包,类似于

    注意,我没有调试你的代码,只是在需要的地方添加了一个闭包)

    var color = "blue";
    
    $(document).ready(function() {
    
      $('#bot').on('click', function(e) {
          return ((color === "blue") ? vlu(e) : red(e)));
      }
    
    });
    
    function vlu(event) {
      alert("Because the sky is blue...");
      color = "red";
    }
    
    function red(event) {
      alert("Over the blood-red river.");
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

    • 你真的需要把它包在一个闭包里吗?没有它对我有用(在 Chrome 中):jsfiddle.net/ho6cfb49
    • @ChristianVarga 您说得对,先生,它确实可以在没有闭包的情况下工作(您的小提琴证明了这一点) - 但是,在更复杂的场景中使用闭包是一个好习惯(即比三元运算符更多的逻辑) - 话虽如此:用括号括起来有点像闭包本身(在这种情况下,返回函数是在回调中添加的函数)
    猜你喜欢
    • 2016-04-25
    • 2020-11-07
    • 2013-01-14
    • 1970-01-01
    • 2021-10-06
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多