JavaScript - Как мне обновить переменную после того, как она была установлена процедурно?
У меня есть переменная, определенная в верхней части моей функции, и объект JSON, ссылающийся на эту переменную непосредственно под ней. Событие click, несколько циклов и анонимные функции позже я обновляю значение первой переменной, затем ссылаюсь на свойство объекта JSON, ожидая, что оно получит новое значение, но это не работает.
Мой код выглядит примерно так:
var errorval = "Not set";
var rules = {
firstRule : {
name : 'example',
message : 'Needs to be '+errorval+' characters long'
}
}
$('.button').on('click', function(){
for(var foo in bar) {
$.each(foo, function(){
errorval = 3;
// ALERTS "Needs to be Not set characters long"
alert(rules.firstRule.message);
});
}
});
Поэтому я спрашиваю, как я могу обновить errorval
на данный момент в моем коде, так что rules
объект имеет это новое значение в message
имущество.
2 ответа
Решение
Это может решить вашу проблему
var errorval = "Not set";
var rules = {
firstRule : {
name : 'example',
getMessage : function() {
return 'Needs to be '+errorval+' characters long';
}
}
}
$('.button').on('click', function(){
for(var foo in bar) {
$.each(foo, function(){
errorval = 3;
// ALERTS "Needs to be Not set characters long"
alert(rules.firstRule.getMessage());
});
}
});
Вместо строкового свойства вы вызываете метод getMessage, который возвращает строку на основе текущего значения errorval
Это еще одно решение, пожалуйста, прочитайте комментарии:
var errorval = "Not set";
set(errorval);
$('.button').on('click', function(){
//for(var foo in bar) {
// $.each(foo, function(){
errorval = 3;
// you must recall set(errorval) at here for uodate rules object
alert(rules.firstRule.message);
// });
//}
});
function set(errorval){
rules = {
firstRule : {
name : 'example',
message : 'Needs to be '+errorval+' characters long'
}
}
}