Сегодня я столкнулся с очень интересной проблемой, которую многие из вас могут найти элементарно, но поскольку я просто изучаю использование jQuery, мне интересно знать, как это работает.область действия «this» в функции jQuery
У меня есть два массива, и я повторяю элементы массива. Один массив - arrAllDetailsConstantData
, а другой - arrAllDetails
. Я хочу сравнить с помощью arrAllDetailsConstantData и обновление с помощью arrAllDetails.
Я использую вложенные петли. Но происходит то, что при обновлении массива arrAllDetails, массив arrAllDetailsConstantData также обновляется. Я предполагаю, что это как-то связано с охватом родителя (хотя я просто догадываюсь). Не могли бы вы мне помочь?
Вот мой код:
$.each(privateVariables.arrAllDetailsConstantData, function() {
if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {
if (this.Units == $("#txtUnits").val() &&
this.Modifier1 == $("#txtModifier1").val() &&
this.Modifier2 == $("#txtModifier2").val() &&
this.Modifier3 == $("#txtModifier3").val() &&
this.Modifier4 == $("#txtModifier4").val() &&
this.DxOption == $("#ddlDxOption").val() &&
this.DxCode1 == $("#txtDx1").val() &&
this.DxCode2 == $("#txtDx2").val() &&
this.DxCode3 == $("#txtDx3").val() &&
this.DxCode4 == $("#txtDx4").val()) {
} else {
$.each(arrAllDetails, function() {
if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {
this.ActionType = "M";
this.CptName = $("#lblCptDesc").text();
this.CptDesc = $("#lblCptDesc").text();
this.Units = $("#txtUnits").val();
this.Modifier1 = $("#txtModifier1").val();
this.Modifier2 = $("#txtModifier2").val();
this.Modifier3 = $("#txtModifier3").val();
this.Modifier4 = $("#txtModifier4").val();
this.DxOption = $("#ddlDxOption").val();
this.DxCode1 = $("#txtDx1").val();
this.DxCode2 = $("#txtDx2").val();
this.DxCode3 = $("#txtDx3").val();
this.DxCode4 = $("#txtDx4").val();
privateVariables.arrActionData.push(this);
}
});
}
}
});
// test code ends
_this_ внутри функции обратного вызова JQuery относится к элементу итерированного – Grundy
Но тогда почему оба массива становятся обновляться .. Только arrAllDetails должен быть обновлен в этом случае. –
'privateVariables.arrActionData.push (this);' здесь вы добавляете элемент из 'arrAllDetails' в' privateVariables.arrActionData', поэтому при обновлении этого элемента значения изменяются во всех массивах, потому что в массиве сохранена только ссылка на тот же объект – Grundy