3

我很难写出似乎应该是一个简单的if语句!我需要说的是,如果mod不等于a,b或c,那么就这样做。以下是我试图但并不成功:如果声明不适用于(&&)运算符

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

当我键入此为我的编辑器,它说有错误,特别是“实体名称必须紧跟在‘&’在实体引用。 “ ..并且在我去测试时不工作。

任何帮助表示赞赏!


UPDATE: 的网址: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> 

我想在网站的每一页,在页面加载自动重定向到验证页面,除非它是验证页面(/验证),“你没有验证”页面(/未验证)或登录页面(/登录) - 除非用户已经通过设置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> 

然后正常工作

+2

澄清CDATA部分:也就是说,如果“国防部”比其他任何东西,B,C - 然后做一些事情。 – VUELA 2010-02-05 03:03:51

+0

你是如何获得国防部号码?我浏览了站点中的页面,并且没有一个页面的CURRENT_MODULE_ID与您正在测试的MOD编号相匹配。除了主要的网页。 – 2010-02-05 03:36:15

+0

它实际上是Squarespace.Constants.CURRENT_MODULE_ID; ......它们应该都以#modulePage1234567的最终形式出现在源代码中。 – VUELA 2010-02-05 03:49:56

回答

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

// ]]> 

如果这也不行,见好就收的代码中有一个位,使我们可以直接在您的网站上进行调试

+0

这工作很好!非常感谢!我需要//添加! – VUELA 2010-02-05 04:28:48

+0

HTML文档无法识别CDATA标记,因此您需要将它们注释掉以使HTML解析器正常工作。对于CSS代码,您应该已经完成​​了/ * <![CDATA [*// *]]> */ – 2010-02-05 04:32:34

+0

是合理的 - 非常感谢您的提示!以为我疯了! – VUELA 2010-02-05 04:37:37

0

这听起来像你的编辑只是认为你有一个XML文档的工作(?)。你有没有试过在浏览器中实际运行它?如果是这样,浏览器是否也出现错误?

+0

嗨雷克斯!我可以保存它,但是当我测试页面时,它不起作用。页面是在:esber.squarespace.com 我想设置一个基本的年龄验证表格,这部分脚本应该重定向到年龄验证页面,除非他们在这三个页面中的任何一个指定的mod变量。 – VUELA 2010-02-05 03:07:13

+0

其实,是的,它看起来像CMS编辑器不允许我保存它。 – VUELA 2010-02-05 03:11:04

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

我正在使用在线CMS,它只是给我一个框,以输入中的其他内容。我回来的错误看起来像是考虑它xml?: “无法解析您的网站标题代码。您插入无效的XML吗?错误:文档行17错误:实体名称必须紧跟' '嵌套异常:实体名称必须紧跟在实体引用中的'&'后面。“ – VUELA 2010-02-05 03:13:44

+0

在这种情况下,可能会验证文本是否为有效的xhtml。您可能需要包含脚本标记并且需要为javascript进行转义。我已将我的建议修复程序作为对此响应的编辑 – 2010-02-05 03:17:10

+0

我试图用& &进行交换 - 并且错误消息消失,但该功能仍然无效。我还注意到,当我回到编辑器窗口时,它会回到&&。 – VUELA 2010-02-05 03:18:52

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有关?

+0

已经在Mac Firefox 3.5,Safari 4 – VUELA 2010-02-05 03:31:36

4

将脚本包装在CDATA部分。

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

// script here 

]]> 
</script> 
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(); 
} 
+0

中测试过这个页面,我尝试过不用引号,但还没有尝试过匹配方法。 – VUELA 2010-02-05 03:51:23

0

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

Entity '&' not defined

我改编了我的脚本中的上述答案,它的工作。

注意在代码段下面

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