4

我很难写出看似简单的 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) 或登录页面 (/ 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> 

然后它工作正常(?)

4

8 回答 8

7

试试这个:

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

// ]]>

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

于 2010-02-05T04:18:14.657 回答
4

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

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

// script here

]]>
</script>
于 2010-02-05T03:21:13.987 回答
1

您是否将此 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>
于 2010-02-05T03:09:14.530 回答
1

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

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

于 2010-02-05T03:12:22.850 回答
0

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

于 2010-02-05T03:04:44.240 回答
0

您是否尝试将 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();
}
于 2010-02-05T03:48:33.110 回答
0

我在 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>
于 2018-02-15T15:05:10.997 回答
0

只需使用 != 进行比较而不是 == 然后 && 将起作用

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

console.log("filled");

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

于 2020-11-12T12:58:19.370 回答