我很难写出看似简单的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>
然后它工作正常(?)
答案 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" && mod != "5195103" && 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"); }