4

単純な 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 にアクセスし、右側のメニュー項目の 1 つをクリックします (このメニューは、ページの操作が完了すると最終的に非表示になります) -- 確認せずに別のページに移動しようとすると、 age first は /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> 

それでうまくいく(?)

4

8 に答える 8

7

これを試して:

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

// ]]>

これで問題が解決しない場合は、コードをそのままにして、ウェブサイトで直接デバッグできるようにします。

于 2010-02-05T04:18:14.657 に答える
4

スクリプトを CDATA セクションにラップします。

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

// script here

]]>
</script>
于 2010-02-05T03:21:13.987 に答える
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>
于 2010-02-05T03:09:14.530 に答える
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ますか?

于 2010-02-05T03:12:22.850 に答える
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();
}
于 2010-02-05T03:48:33.110 に答える
0

あなたの編集者は、あなたが XML 文書を扱っていると思っているようです。これを実際にブラウザで実行してみましたか?もしそうなら、ブラウザもエラーを出しますか?

于 2010-02-05T03:04:44.240 に答える
0

== の代わりに != を比較に使用するだけで、 && が機能します

if(val != "" && val != "") {

console.log("filled");

}else {console.log("empty"); }

于 2020-11-12T12:58:19.370 に答える
0

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>
于 2018-02-15T15:05:10.997 に答える