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());
        });
    }
});

文字列プロパティの代わりに、errorval の現在の値に基づいて文字列を返す getMessage メソッドを呼び出します。

于 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 に答える