Я наткнулся на проблему, которую я видел раньше, но этого я раньше не мог решить. Я, скорее всего, наткнусь на него снова в будущем, так что, пожалуйста, кто-нибудь объяснит мне, что происходит?
В частичном фрагменте javascript ниже у меня есть функция, которая заполняет экран, включая команду combobox (twitter bootstrap). Когда я нажимаю на один из элементов заказа в этом поле со списком, он должен вызывать функцию clsModCampaigns.blnCompaniesListReload().
По причине того, что я не понимаю, когда-то внутри итератора $ .each, глобальная ссылка на объект 'objModCampaigns' теряется? Я получаю успешное предупреждение «1», но не предупреждение «2».
Внутри $ .each я хотел бы использовать 'objModCampaigns.arrOrderBy' вместо 'this.arrOrderBy', но итератор $ .each, похоже, работает именно так. Почему это так работает?
Что происходит с этим «или» с переменными/объектами, назначенными в корне класса с «этим»?
Есть ли $ .each только специальные ???
function clsModCampaigns(objSetSystem, objSetModuleBase)
{
objModCampaigns = this;
arrOrderBy = {
intID: 'ID',
strName: 'Name'};
[...]
this.blnScreenCampaignInitialize = function (fncSuccess,fncError, intID) {
$.each(this.arrOrderBy, function (strFieldName, strFieldDescription) {
if(strFieldName != 'datDeleted' || objSystem.blnHasPerm("CAMPAIGNS_DELETED")) {
strOrderByID = "ulCampaignsCompaniesListOrderBy" + strFieldName;
$("#ulCampaignsCompaniesListOrderBy").append('<li><a href="#" id="'+strOrderByID+'">'+strFieldDescription+'</a></li>');
$("#"+strOrderByID).unbind("click").bind("click", function() {
alert("1");
objModCampaigns.arrCurrentShownCompanies.strOrderBy = strFieldName;
objModCampaigns.blnCompaniesListReload();
alert("2");
});
}
});
return true;
};
}
Внутри '$ .each()' http://code.jquery.com/jquery-1.11.0.js – loveNoHate
почему вы не используете 'var' для объявлений переменных? – naomik
@naomik: должен ли я? Кажется, это работает в других местах? –