Оператор If не работает с оператором And (&&)
-
18-09-2019 - |
Вопрос
Мне трудно написать то, что, по-видимому, должно быть простым утверждением if!Мне нужно, чтобы это указывало, если mod не равен a, b или c - тогда сделайте это.Вот что я пытался сделать, но безуспешно:
var mod = CURRENT_MODULE_ID;
if (mod != "5827289" && mod != "5195103" && mod != "5181422") {
doSomething();
}
Когда я ввожу это в свой редактор, он сообщает об ошибке, в частности о том, что "Имя объекта должно сразу следовать за "&" в ссылке на объект". ..и не работает, когда я иду тестировать.
Любая помощь приветствуется!!
Обновить:URL-адрес: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>
тогда это работает нормально (?)
Решение
Попробуй это:
// <![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/";
};
};
// ]]>
Если это не сработает, просто оставьте код там ненадолго, чтобы мы могли отладить его непосредственно на вашем веб-сайте
Другие советы
Оберните ваш скрипт в раздел CDATA.
<script type="text/javascript">
<![CDATA[
// script here
]]>
</script>
Я попробовал ТОЧНО такой же код, как у вас, и он работает нормально:
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
?
Вы встраиваете этот javascript в XML-документ?
Похоже, XML-документ не очень хорошо сформирован, возможно, потому, что & должен быть экранирован как &
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>
Похоже, ваш редактор просто думает, что вы работаете с XML-документом.Вы пробовали на самом деле запустить это в браузере?Если да, то выдает ли браузер также ошибку?
Вы пытаетесь сравнить идентификатор как строку или значение?Вы пробовали это без кавычек?
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();
}
Я получил эту ошибку в разделе скрипта в файле 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>