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'
    }
  }
}

демонстрация

Другие вопросы по тегам