【问题标题】:If Statement not working with And (&&) OperatorIf 语句不适用于 And (&&) 运算符
【发布时间】:2011-01-13 08:52:00
【问题描述】:

我很难写出看似简单的 if 语句!我需要它来说明 mod 是否不等于 a、b 或 c - 然后执行此操作。这是我正在尝试但没有成功的方法:

var mod = CURRENT_MODULE_ID;
if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
   doSomething();
}

当我在我的编辑器中输入此内容时,它说有一个错误,特别是“实体名称必须紧跟在实体引用中的 '&' 之后。” ..当我去测试时不工作。

感谢任何帮助!


更新: 网址:esber.squarespace.com

完整的脚本:

<script type="text/javascript" src="/storage/scripts/sessvars.js"></script>
<script type="text/javascript">
<![CDATA[ 

onload=function(){
 sessvars.browserConfirmation?'none':'';
 sessvars.ageConfirmation?'none':'';
}; 

var mod = Squarespace.Constants.CURRENT_MODULE_ID;
if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
   if(sessvars.ageConfirmation != "yes"){
      window.location = "/verify/";
   };
};

]]>
</script> 

我希望站点中的每个页面在页面加载时自动重定向到验证页面,除非它是验证页面 (/verify)、“您未通过验证”页面 (/not-verified) 或登录page (/login) -- 除非用户已经通过设置 sessvars 进行了验证,否则他们可以继续访问主页。

为了测试这一点,我访问 esber.squarespace.com 并单击右侧的一个菜单项(当我完成页面时,此菜单最终会被隐藏)——当我尝试转到另一个页面时在没有先验证我的年龄的情况下,我应该被重定向回 /verify 页面,但这并没有发生。

如果我将脚本修改为:

<script type="text/javascript" src="/storage/scripts/sessvars.js"></script>
<script type="text/javascript">

onload=function(){
 sessvars.browserConfirmation?'none':'';
 sessvars.ageConfirmation?'none':'';
}; 

var mod = Squarespace.Constants.CURRENT_MODULE_ID;
if (mod != "5827289") {
   if(sessvars.ageConfirmation != "yes"){
      window.location = "/verify/";
   };
};

</script> 

然后它工作正常(?)

【问题讨论】:

  • 澄清:意思是如果 'mod' 不是 a, b, c - 然后做点什么。
  • 你是如何获得模组编号的?我浏览了您网站中的页面,但没有一个页面的 CURRENT_MODULE_ID 与您正在测试的模组编号相匹配。除了主 url 页面。
  • 其实是 Squarespace.Constants.CURRENT_MODULE_ID; ...它们都应该以 #modulePage1234567 的最终形式出现在源代码中。
  • 我之前做过类似的事情并且效果很好: var mod = Squarespace.Constants.CURRENT_MODULE_ID; var imgColor = "红色"; // 默认 if (mod == "2875590" || mod == "2875610" || mod == "2875616") { imgColor = "Green"; }

标签: javascript content-management-system cdata logical-operators squarespace


【解决方案1】:

试试这个:

// <![CDATA[ 

onload=function(){
 sessvars.browserConfirmation?'none':'';
 sessvars.ageConfirmation?'none':'';
}; 

var mod = Squarespace.Constants.CURRENT_MODULE_ID;
if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
   if(sessvars.ageConfirmation != "yes"){
      window.location = "/verify/";
   };
};

// ]]>

如果这不起作用,请将代码留在那里一点,以便我们可以直接在您的网站上调试它

【讨论】:

  • HTML 文档无法识别 CDATA 标记,因此您需要将它们注释掉以使 HTML 解析器正常工作。对于 CSS 代码,你会这样做 /*/ /]]>*/
  • 说得通 - 非常感谢您的提示!以为我要疯了!!
  • 我以前去过那里很多次。很高兴我能帮上忙。
  • 我尝试使用 它不起作用,但是当我添加 // 然后它工作正常
【解决方案2】:

将您的脚本包装在 CDATA 部分中。

<script type="text/javascript">
<![CDATA[

// script here

]]>
</script>

【讨论】:

    【解决方案3】:

    我尝试了与您的完全相同的代码,它工作正常:

    function doSomething() {alert("doing");}
    var CURRENT_MODULE_ID = 5195103000;
    var mod = CURRENT_MODULE_ID;
    if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
       doSomething();
    }
    

    它确实“做某事”。当值更改为 5195103 时,什么都不会发生,这是正确的

    抛开编辑器不谈,运行时出现的脚本错误是什么,你使用的浏览器是什么?我怀疑这可能是其他地方的错误,或者可能与CURRENT_MODULE_ID 有关?

    【讨论】:

    • 已在 Mac Firefox 3.5、Safari 4 中测试页面
    【解决方案4】:

    您是否将此 javascript 嵌入到 xml 文档中?

    听起来xml文档格式不正确,可能是因为&应该转义为&

    javascript 本身看起来也不错

    试试:

    var mod = CURRENT_MODULE_ID;
    if (mod != "5827289" &amp;&amp; mod != "5195103" &amp;&amp; mod != "5181422") {
       doSomething();
    }
    

    你会发现javasciprt是否需要转义

    根据评论进行编辑:

    尝试以下方法:

    <script type="text/javascript">
    <![CDATA[
    var mod = CURRENT_MODULE_ID;
    if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
       doSomething();
    }
    ]]>
    </script>
    

    【讨论】:

    • 我正在使用在线 CMS,它只是给了我一个框,可以在 中输入其他内容。我回来的错误看起来像是在考虑它 xml?:“无法解析您的站点标题代码。您是否插入了无效的 XML?错误:文档第 17 行错误:实体名称必须紧跟在 '&' 之后实体引用。嵌套异常:实体名称必须紧跟实体引用中的“&”。”
    • 在这种情况下,它可能会将文本验证为有效的 xhtml。您可能需要包含脚本标签和所需的 javascript 转义。我已将我建议的修复作为对此回复的修改
    • 我尝试用 && -- 错误信息消失了,但该功能仍然不起作用。我还注意到,当我返回编辑器窗口时,它会恢复为 &&。
    • 我包裹在 CDATA 中,它似乎工作得更好,因为现在它正在保存而没有错误,我还可以在页面源中看到 javacript .... 但是它仍然没有做什么我希望它这样做,所以在某个地方一定有另一个问题。当我在声明中只列出一项时,它工作正常:if (mod != "5827289"),当我尝试列出多个时,问题就出现了。
    • 不要忘记像这样添加注释掉 CDATA 部分: //
    【解决方案5】:

    听起来您的编辑器只是认为您正在处理 XML 文档。您是否尝试过在浏览器中实际运行它?如果有,浏览器是否也会报错?

    【讨论】:

    • 嗨,雷克斯!我可以保存它,但是当我测试页面时它不起作用。该页面位于:esber.squarespace.com 我正在尝试设置一个基本的年龄验证表单,这部分脚本应该重定向到年龄验证页面,除非它们位于 mod 变量指定的这三个页面中的任何一个上.
    • 实际上,是的,看起来 CMS 编辑器不允许我保存。
    【解决方案6】:

    您是否尝试将 ID 作为字符串或值进行比较?你试过不带引号吗?

    var mod = CURRENT_MODULE_ID;
    if (mod != 5827289 && mod != 5195103 && mod != 5181422) {
       doSomething();
    }
    

    或者另一种方法是使用匹配

    var mod = CURRENT_MODULE_ID;
    if (!mod.match("5827289|5195103|5181422")) {
       doSomething();
    }
    

    【讨论】:

      【解决方案7】:

      我在 XSL 文件的脚本部分中遇到此错误。

      实体“&”未定义

      我在我的脚本中调整了上述答案,它奏效了。

      注意下面代码段中的 CDATA 部分

      <script>
        var  Quantity860=<xsl:value-of select="$QuantityOrdered_860" />;
        var  Quantity850=<xsl:value-of select="$QuantityOrdered_850" />;
        var  QuantityToReceive860=<xsl:value-of select="$QuantityLeftToReceive_860" />;
      
        if(parseFloat(Quantity860.textContent) !== parseFloat(Quantity850.textContent) <![CDATA[ && ]]> parseFloat(QuantityToReceive860.textContent) !== parseFloat(Quantity850.textContent))
        {
            Quantity860.style.color="#FF6347";
            Quantity850.style.color="#FF6347";
            QuantityToReceive860.style.color="#FF6347";
        }
      </script>
      

      【讨论】:

        【解决方案8】:

        只需使用 != 代替 == 然后 && 将起作用

        if(val != "" &amp;&amp; val != "") {

        console.log("filled");

        }else {console.log("empty"); }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-02
          • 1970-01-01
          • 2012-02-22
          • 2012-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多