【问题标题】:Javascript switch always defaultJavascript 开关始终默认
【发布时间】:2013-03-19 12:00:07
【问题描述】:

我正在开发一个根据值设置 2 个变量的开关,如下所示:

switch(_drukte) {
    case "normaal": 
        _gradients.push("green");
        _widths.push("20%");
    break;
    case "drukker": 
        _gradients.push("yellow");
        _widths.push("40%");
    break;
    case "gezellig druk": 
        _gradients.push("orange");
        _widths.push("60%");
    break;
    case "druk": 
        _gradients.push("red");
        _widths.push("80%");
    break;
    case "vol": 
        _gradients.push("full");
        _widths.push("100%");
    break;
    default:
        _gradients.push("green");
        _widths.push("20%");
    break;
}

由于某种原因,这总是调用默认值。 _drukte 来自 JSON 文件的 AJAX 获取,并且值会随着循环而变化。 我已经提醒了 _drukte 的值,它符合预期(目前它是“normaal”、“drukker”、“gezellig druk”、“druk”和“vol”)。 我尝试弄乱其他情况(甚至使其无效 javascript),它只是调用默认值。

有人知道为什么吗?

【问题讨论】:

  • 你能设置一个jsfiddle吗?
  • _drukte 的实际值显示示例。在你的 switch 语句之前做一个console.log(_drukte),可能你的 ajax 有问题。
  • 首先将__gradients定义为哈希表,然后尝试运行代码..
  • FWIW? @AdrianoVaroliPiazza,_gradients 在代码中设置得更高,var _gradients = [];。我不会尝试填充不存在的数组。

标签: javascript loops switch-statement default


【解决方案1】:

我不想离窗太远,但我几乎可以向您保证,您的 ajax 请求 的返回值不会 100% 适合您的 case'es。

如果我是你,我会在 switch 声明之前直接 console.log( _drukte );

也许是空格?大写字母?

这是我在没有看到您的实际代码的情况下可以提供的最佳答案,所以当遇到switch statement 时,请尝试找出_drukte 包含的确切值。

【讨论】:

  • 可能甚至是 OP 谈到的循环的范围问题,或者可能是 switch 不是 readystatechange/success 回调的一部分
  • console.log 似乎没有做任何事情。
  • @jAndy 没关系,它不起作用,Fetch 在起作用。当我 console.log _drukte 它向我显示 5 个值: ["normaal"]["drukker"]["gezellig druk"]["druk"]["vol"] (如控制台所示)。
  • 所以问题是你得到一个数组并且你认为你有一个字符串,这就是为什么它总是默认的。
  • 但它不是一个数组,因为它在 console.log 上运行了 5 次,每次都分配不同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多