Javascript 如果语句不使用And(&;)运算符

Javascript 如果语句不使用And(&;)运算符,javascript,content-management-system,cdata,logical-operators,squarespace,Javascript,Content Management System,Cdata,Logical Operators,Squarespace,我很难写出一个看似简单的if语句!我需要它说,如果mod不等于a、b或c,那么就这样做。以下是我曾尝试但未成功的内容: var mod = CURRENT_MODULE_ID; if (mod != "5827289" && mod != "5195103" && mod != "5181422") { doSomething(); } 当我在编辑器中输入这个时,它会说有一个错误,特别是“实体名称必须紧跟在实体引用中的“&”后面。” .. 当我去测试的时候

我很难写出一个看似简单的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)、“您未验证”页面(/notverify)或登录页面(/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> 

onload=函数(){
浏览器确认?“无”:“;
sessvars.age确认?'none':'';
}; 
var mod=Squarespace.Constants.CURRENT_MODULE_ID;
如果(mod!=“5827289”){
如果(sessvars.ageConfirmation!=“是”){
window.location=“/verify/”;
};
};

然后它就可以正常工作了(?)

听起来你的编辑器只是认为你在处理一个XML文档。您是否尝试过在浏览器中运行此功能?如果是,浏览器是否也会给出错误?

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

听起来xml文档的格式不好,可能是因为&应该作为&

javascript本身看起来也很好

尝试:

您将通过这种方式了解是否需要转义javasciprt

根据评论进行编辑:

请尝试以下操作:

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

我尝试了与您完全相同的代码,效果很好:

function doSomething() {alert("doing");}
var CURRENT_MODULE_ID = 5195103000;
var mod = CURRENT_MODULE_ID;
if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
   doSomething();
}
它确实做了一些事情。当值更改为5195103时,不会发生任何正确的情况


撇开编辑器不谈,运行它时的脚本错误是什么?使用的浏览器是什么?我怀疑这可能是其他地方的错误,或者可能与当前模块ID有关。?

将脚本包装到CDATA部分

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

// script here

]]>
</script>

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

var mod = CURRENT_MODULE_ID;
if (mod != 5827289 && mod != 5195103 && mod != 5181422) {
   doSomething();
}
或者另一种方法是使用match

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

// <![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/";
   };
};

// ]]>
//

如果这不起作用,只需将代码保留一段时间,这样我们就可以直接在您的网站上调试它

我在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>

var Quantity860=;
var Quantity850=;
var QuantityToReceive860=;
if(parseFloat(Quantity860.textContent)!==parseFloat(Quantity850.textContent)parseFloat(QuantityToReceive860.textContent)!==parseFloat(Quantity850.textContent))
{
Quantity860.style.color=“#FF6347”;
Quantity850.style.color=“#FF6347”;
QuantityToReceive860.style.color=“#FF6347”;
}

只需使用!=在比较中,而不是==则&&将起作用

if(val!=”&&val!=”){

console.log(“填充”);

}其他

{console.log(“empty”);}

说明:意思是如果“mod”不是a、b、c,那么就做些什么。你是如何得到mod号码的?我浏览了你网站上的页面,没有一个页面的当前模块ID与你正在测试的模块号匹配。除了主url页面。它实际上是Squarespace.Constants.CURRENT\u MODULE\u ID。。。它们都应该以源代码中出现的#modulePage1234567的最终形式出现;var imgColor=“红色”//如果(mod==“2875590”| | mod==“2875610”| | mod==“2875616”){imgColor=“Green”}你好,请使用默认值!我可以保存它,但是当我测试页面时它不工作。页面位于:esber.squarespace.com我正在尝试设置一个基本的年龄验证表单,脚本的这部分应该重定向到年龄验证页面,除非它们位于mod变量指定的这三个页面中的任何一个。实际上,是的,看起来CMS编辑器不允许我保存这些内容。我使用的是在线CMS,它只给我一个框,让我在页面中输入其他内容。我返回的错误看起来像是xml?:“无法解析站点标题代码。是否插入无效的xml?错误:文档第17行错误:实体名称必须紧跟实体引用中的“&”。嵌套异常:实体名称必须紧跟实体引用中的“&”。”在这种情况下,它可能正在验证文本是否为有效的xhtml。您可能需要包含脚本标记和javascript所需的转义。我已将我建议的修复作为对此响应的编辑。我已尝试使用&&;——错误信息消失了,但该函数仍然不起作用。我还注意到,当我返回编辑器窗口时,它会返回到&。我将CDATA打包,它似乎工作得更好,因为现在它正在保存,没有错误,我还可以在页面源代码中看到JavaScript。。。。然而,它仍然没有做我想要它做的事情,所以肯定还有另一个问题。当我的语句中只列出一项时,它可以正常工作:如果(mod!=“5827289”),当我尝试列出多个项目时,问题就出现了。别忘了添加注释,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>