2

jQueryで変数を「保存」する方法はありますか?

sz [1]の値を変更し、値ごとに.load()を起動する.each()ループがあります。ただし、コールバック関数にsz [1]を配置すると、最後に記録されたsz [1]の値のみが使用され、最初に.load()を呼び出したときの値は使用されません。

$("#Big").find("a").each(function() {
  url = $(this).attr("href");
  pattern = new RegExp("sizes/([" + sizes + "])/$");
  otherPattern = new RegExp("sizes/([" + otherSizes + "])/$");
  sz = pattern.exec(url);
  if(sz) {
    normLink(sz[1], srcBase);
  } else {
    sz = otherPattern.exec(url);
    if(sz) {
      NotOkToDeLoad++;
      $("a#" + sz[1]).load(URL + sz[1] + " div#psp", function() { fixLink(sz[1]); });
    }
  }
});

sz [1]は、「k」、「h」、または「o」にすることができます。ただし、fixLink()は常に、最後の可能な値「o」で3回呼び出されます。

私の現在の回避策は、sz [1]の可能な値ごとに3つの別々の.load()を記述することですが、もっと簡単な方法があるはずです。私は何かを見落としていますか?

4

4 に答える 4

2

[MDN]を使用して、変数をローカルにすることに慣れてください。var

var pattern = new RegExp("sizes/([" + sizes + "])/$");
var otherPattern = new RegExp("sizes/([" + otherSizes + "])/$");
var sz = pattern.exec(url);

問題は、sz(暗黙的に)グローバルであるため、ループを繰り返すたびに前の値が上書きされることです。

グローバルはできるだけ避けてください。JSHintのようなツールは、暗黙のグローバルの場合に警告します。

また、ループ内にクロージャを作成するときに別の問題があることに注意してください。.each()通常のループではなく使用しているため、ケースには適用されませんが、for注意が必要です。

于 2012-06-17T10:17:46.253 に答える
0

クロージャを使用して値を保存します(sz変数をローカルにできない場合のみ!):

$("a#" + sz[1]).load(URL+ ...., (function(val) { return function(){ fixLink(val); } })(sz[1]));
于 2012-06-17T10:23:18.950 に答える
0

おそらくあなたはキーワードszを使ってグローバルな変数を試してみようとしています。var

于 2012-06-17T10:18:04.777 に答える
-1

それが役立つかどうかはわかりませんが、必要な変数を要素に関連付けられた$ .data()変数に格納できるかもしれません...これについてはここで読むことができます

于 2012-06-17T09:56:12.113 に答える