0

我在函数顶部定义了一个变量,并在其下方直接引用了该变量的 JSON 对象。单击事件、几个循环和一个匿名函数稍后我更新第一个变量的值,然后引用 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

4

2 回答 2

5

这可能会解决您的问题

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 的当前值返回一个字符串

于 2012-11-11T19:47:46.930 回答
0

这是另一种解决方案,请阅读评论:

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

演示

于 2012-11-11T19:57:34.737 回答