Javascript 如果语句不使用And(&;)运算符
我很难写出一个看似简单的if语句!我需要它说,如果mod不等于a、b或c,那么就这样做。以下是我曾尝试但未成功的内容: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(); } 当我在编辑器中输入这个时,它会说有一个错误,特别是“实体名称必须紧跟在实体引用中的“&”后面。” .. 当我去测试的时候
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>