如果声明不与And(&&)运营商合作

时间:2010-02-05 03:02:08

标签: 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();
}

当我在编辑器中输入此内容时,它表示存在错误,特别是“实体名称必须紧跟'&'在实体参考中。“ ..并且在我去测试时不起作用。

任何帮助表示赞赏!!


更新: 网址: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),“您未经验证”页面(/未验证)或登录page(/ login) - 除非用户已通过设置sessvars进行验证,否则他们可以继续访问主页。

为了测试这个,我去esber.squarespace.com并点击右边的一个菜单项(当我完成页面时,这个菜单最终将被隐藏) - 当我尝试去另一个页面时如果没有先验证我的年龄,我应该被重定向回/验证页面,但这不会发生。

如果我将脚本修改为:

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

然后它工作正常(?)

8 个答案:

答案 0 :(得分:6)

试试这个:

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

// ]]>

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

答案 1 :(得分:4)

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

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

// script here

]]>
</script>

答案 2 :(得分:1)

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

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

进行转义

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>

答案 3 :(得分:1)

我尝试了与你的完全相同的代码,它运行良好:

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

它做了'doSomething'。当值更改为5195103时,没有任何正确的操作

除了编辑器,运行它时脚本错误是什么以及您使用的浏览器是什么?我怀疑它可能是其他地方的错误,或者可能与CURRENT_MODULE_ID有关?

答案 4 :(得分:0)

听起来您的编辑只是认为您正在使用XML文档。您是否尝试在浏览器中实际运行此功能?如果是这样,浏览器是否也会出错?

答案 5 :(得分: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();
}

答案 6 :(得分:0)

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

  

实体'&amp;'未定义

我在我的脚本中修改了上述答案,但它确实有效。

请注意下面代码段中的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>

答案 7 :(得分:0)

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

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

console.log("filled");

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