Если оператор не работает с оператором And (&&) - PullRequest
3 голосов
/ 05 февраля 2010

Мне трудно писать то, что кажется простым утверждением if! Мне нужно сказать, что если мод не равен a, b или c - тогда сделайте это. Вот что я пытался, но безуспешно:

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

Когда я набираю это в своем редакторе, он говорит, что произошла ошибка, а именно: «Имя сущности должно сразу следовать за« & »в ссылке на сущность». .. и не работает, когда я иду на тестирование.

Любая помощь приветствуется !!


UPDATE: 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), страница «Вы не подтверждены» (/ не подтверждены) или логин 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> 

тогда нормально работает (?)

Ответы [ 7 ]

6 голосов
/ 05 февраля 2010

Попробуйте это:

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

// ]]>

Если это не работает, просто оставьте код на некоторое время, чтобы мы могли отладить его прямо на вашем сайте

4 голосов
/ 05 февраля 2010

Оберните ваш скрипт в раздел CDATA.

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

// script here

]]>
</script>
1 голос
/ 05 февраля 2010

Я испробовал ТОЧНЫЙ код, аналогичный вашему, и он отлично работает:

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?

1 голос
/ 05 февраля 2010

Вы встраиваете этот 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 голосов
/ 15 февраля 2018

Я получил эту ошибку в разделе сценария в 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>
0 голосов
/ 05 февраля 2010

Вы пытаетесь сравнить идентификатор в виде строки или значения? Вы пробовали без кавычек?

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 голосов
/ 05 февраля 2010

Похоже, ваш редактор думает, что вы работаете с документом XML. Вы пробовали на самом деле запустить это в браузере? Если так, браузер также выдает ошибку?

...