【问题标题】:javascript conditional not reaching elsejavascript条件未达到其他
【发布时间】:2016-07-09 11:10:45
【问题描述】:

我正在创建一个切换功能来“收藏”许多列表中的一个项目。我有工作脚本来切换项目进出用户特定的收藏夹列表,将该更改传达给数据库,并相应地填充站点的其余部分。一切正常,主要是 PHP 和 Ajax。 但是,我的 javascript 很糟糕。我被困在一个条件下,将图标从一个充满的心变成一个空心的。由于某种原因,即使 if 语句为假,它也永远不会到达 else 语句。如果我颠倒条件,它仍然会处理 if 罚款,但不会处理 else。

图片是:

<img src="includes/icons/fave-<?php echo $favStatus; ?>.png" id="faveToggle" class="faveIcon" onClick="toggleFave()">

位于 toggleFave() 中的条件是:

if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")){
    document.getElementById('faveToggle').src = "includes/icons/fave-true.png";
} else {
    document.getElementById('faveToggle').src = "includes/icons/fave-false.png";
}

那么,呃,我该怎么办?

【问题讨论】:

  • .indexOf 返回一个数字,而不是 true/false
  • 添加到@Pointy Boolean(-1) 是真的,不是假的。

标签: javascript if-statement conditional


【解决方案1】:

indexOf 返回找到子字符串的从 0 开始的索引,否则返回 -1-1 恰好是 "truthy"

这意味着您有两种可能性,它要么在字符串中并且具有正(真实)位置,要么不是并且您得到真实的-1。无论哪种方式,它总是会进入第一个块。你想要:

if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png") > 0){

【讨论】:

    【解决方案2】:

    你只需要获取一次元素:

    var toggle = document.getElementById("faveToggle");
    if (toggle.src.indexOf("fave-false.png") >= 0) {
        toggle.src = "includes/icons/fave-true.png";
    } 
    else {
        toggle.src = "includes/icons/fave-false.png";
    }
    

    .indexOf() 函数返回搜索到的子字符串的位置,如果没有找到,则返回 -1

    【讨论】:

      【解决方案3】:

      你可以检查它是否大于-1

      if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")>-1){
      alert('1')   
       document.getElementById('faveToggle').src = "includes/icons/fave-true.png";
      } else {
      alert("2")
          document.getElementById('faveToggle').src = "includes/icons/fave-false.png";
      }
      

      jsfiddle

      【讨论】:

        【解决方案4】:

        这是我使用ternary operator 的简化版本:

        var toggle   = document.getElementById('faveToggle'),
            newState = toggle.src.toString().indexOf("fave-false.png") == -1 ? true : false;
        
        toggle.src = "includes/icons/fave-"+newState+".png";
        

        【讨论】:

          【解决方案5】:

          您可以使用bitwise not ~ 运算符进行检查。

          ~bitwise not operator。它非常适合与indexOf() 一起使用,因为indexOf 如果找到索引0 ... n 则返回,否则返回-1

          value  ~value   boolean
           -1  =>   0  =>  false
            0  =>  -1  =>  true
            1  =>  -2  =>  true
            2  =>  -3  =>  true
            and so on 
          
          if(~document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")){
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-07
            • 1970-01-01
            • 2015-01-29
            • 2012-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多