gpt4 book ai didi

javascript - Jquery .each() 范围问题(错误?)

转载 作者:行者123 更新时间:2023-11-29 10:52:37 25 4
gpt4 key购买 nike

出于某种原因,我对嵌套 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

最佳答案

您可以使用指向循环中当前项目的 this 关键字进行尝试。而不是检查 if (ClientDiv == null) 你应该检查 if (ClientDiv.length > 0) 因为 jQuery 返回空对象如果它没有找到该元素,那么检查将失败。

var additions;
jQuery.each(Messages.Additions, function () {
var $clientDiv = $("#clientTitle_" + this.ClientID);

if ($clientDiv.length == 0) {
$("#ClientTemplate").tmpl(Client).appendTo("#ClientContainer");
} else {
jQuery.each(Client.KNE, function () {
$clientDiv.find("#kneTitle_" + this.KNE);
});
}
});

关于javascript - Jquery .each() 范围问题(错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com