【发布时间】:2011-08-31 20:03:15
【问题描述】:
出于某种原因,我对嵌套 jQuery.each() 函数的调用正在失去某些变量的范围,但不是其他变量。在下面的代码中,Client.KNE 引用有效,但 ClientDiv 无效,即使在此之前,两者都已定义、填充变量...
通过将 Client 和 ClientDiv 切换为全局变量,它可以工作,但我觉得我不应该在这里创建全局变量...
不起作用:
jQuery.each(Messages.Additions, function (clientIndex) {
var Client = Messages.Additions[clientIndex];
var ClientDiv = $("#clientTitle_" + Client.ClientID);
if (ClientDiv.length == 0) {
$("#ClientTemplate").tmpl(Client).appendTo("#ClientContainer");
} else {
jQuery.each(Client.KNE, function (kneIndex) {
var KNE = Client.KNE[kneIndex]; // Works
var KNEDiv = ClientDiv.find("#kneTitle_" + KNE.KNE); // DOES NOT WORK
有效:
jQuery.each(Messages.Additions, function (clientIndex) {
Client = Messages.Additions[clientIndex];
ClientDiv = $("#clientTitle_" + Client.ClientID);
if (ClientDiv.length == 0) {
$("#ClientTemplate").tmpl(Client).appendTo("#ClientContainer");
} else {
jQuery.each(Client.KNE, function (kneIndex) {
KNE = Client.KNE[kneIndex]; // Works
KNEDiv = ClientDiv.find("#kneTitle_" + KNE.KNE); // Works
有人知道我在第一个版本中做错了什么吗?或者这是一个错误?为什么一个变量起作用,而另一个变量不起作用...
从这里:Jquery $().each method obscures 'this' keyword 看起来我可以将变量传递给函数调用,但我必须这样做吗?
试过上面的链接,还是不行:
jQuery.each(Messages.Additions, function (clientIndex) {
var Client = Messages.Additions[clientIndex];
var ClientDiv = $("#clientTitle_" + Client.ClientID);
if (ClientDiv.length == 0) {
$("#ClientTemplate").tmpl(Client).appendTo("#ClientContainer");
} else {
jQuery.each(Client.KNE, function (kneIndex, Client, ClientDiv) {
var KNE = Client.KNE[kneIndex];
var KNEDiv = ClientDiv.find("#kneTitle_" + KNE.KNE); //Does not work - ClientDiv undefined
没有满意答案的类似问题: Scope of jQuery each() function?
解决方案
$.each(Messages.Additions, function () {
var $Client = this;
var $ClientDiv = $("#clientTitle_" + $Client.ClientID);
if (!$ClientDiv.length) {
$("#ClientTemplate").tmpl($Client).appendTo("#ClientContainer");
} else {
$.each($Client.KNE, function () {
var $KNE = this;
var $KNEDiv = $ClientDiv.find("#kneTitle_" + jq($KNE.KNE));
// SWITCHED TO $ PREFIX
【问题讨论】:
-
不应该是带有小写f的“.find()”吗?
-
很好,我实际上是在发布代码后就在这里修复了我的代码。不幸的是,这不是我的问题的原因;-)
-
请阅读“询问 JavaScript 问题时,您应该”部分here
-
我的意思是这个项目:“隔离有问题的代码并在 jsFiddle 或 JS Bin 等在线环境中重现它”。不,你的 sn-p 不够清楚,因为它不是孤立的。
标签: javascript jquery jquery-selectors each