2012-03-28 8 views
0

私はrulesObjectを呼び出すjavavascriptオブジェクトを作成しています。このアイデアは、スクリプトの最初の段階でmysqlデータベースから動的に生成される他のチェックボックスを有効/無効にするためにチェックする必要があるすべてのルールを含むjavascriptオブジェクトであることが考えられます。今私は何をする必要があるか動的に指定されたオブジェクトプロパティへのアクセス

rulesObject = { 
     chk533570 : ["533577", "503671", "503667", "604028", "503661"], 
     chk503928 : ["533577", "533578","503671", "503666", "533576", "503667", "324201", "503221", "604028", "503668", "533580", "503669", "533579", "533581", "503670"] 
};  

:今のところ、私はちょうどので、ここで私のオブジェクトは、現時点では次のようになります、私は私が探しているシナリオを作成する知っている二つの規則でそれをテストしていますそのオブジェクトから情報にアクセスします。簡単なアラート(rulesObject。chk533570)を実行すれば、完璧に動作します。私に必要なものを正確に提供します。しかし、私がしなければならないことは、以下を実行することによってちょうどクリックされたものに基づいて特定のルールにアクセスすることです。私は「533570」大切なチェックボックスをクリックしたのであれば、例えば、それは次を通過します:

$('input').click(function(){    
if(this.checked) { 
    checkRules(this.value, 'checked'); 
} else { 
    checkRules(this.value, 'unchecked'); 
}   
});  

(もちろん、私はそこにjQueryを使用していますが、私はそうWebアプリケーション全体に使用しています)

私のcheckRules関数に移動しました。それはまだ初期段階にあるので、非常にシンプルです。私がちょうど選択したものの価値を警告したいだけです。繰り返しますが、私が警告(rulesObject。chk533570)をしても、関数内であっても正しい結果が得られますが、私が選択したものにアクセスする必要があるので、オブジェクトプロパティの先頭に 'chk' justselected値を追加します(この場合は533570に等しくなります)。ここで私はそれを行うことを試みた方法があります。

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 
     currentrules = rulesObject.rulename; 

     alert(rulename);   
     alert(currentrules); 
} 

警告1:chk533570 警告2:未定義

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 

     alert(rulesObject.rulename); 
}  

警告:不定

function checkRules(justselected, state) { 
     rulename= 'chk' + justselected; 

     alert(rulesObject + '.chk' + justselected); 
}  

警告:[オブジェクトオブジェクト] .chk533570

function checkRules(justselected, state) {  
     alert(rulesObject.chk533570); 
}  

アラート:533577,503671,503667,604028,503661

正しい結果が得られるように、その名前を正しく呼び出す方法はありますか?私もそこに 'chk'を持っていないようにしようとしましたが、javascriptオブジェクトは完全に数字のプロパティを好まなかったのです。

+0

重複するhttp://stackoverflow.com/questions/9709130/javascript-object-using-to-retrieve-values/9709167 – jbabey

答えて

1

obj.keyobj['key']と同じですが、2番目の方法では、キーはプレーンなJavaScript式なので動的にすることができます。

だから、単にrulesObject['chk' + justselected]を使用することができます。

function checkRules(justselected, state) {  
     alert(rulesObject['chk' + justselected]); 
} 

昔の人は途中で alert(eval('rulesObject.chk' + justselected)); を使用するために使用されます。これが動作する間、はこのを使用しないでください。 eval()を使用することは、常に避けてください。この場合、とにかくきれいな方法があります。

+1

ありがとうございます。私がこれを受け入れるとすぐに(私は11分待たなければならないと言います)、私は行くつもりです。これはまさに私が必要としていたものです! – amydot

+0

ああ、evalも使用していないことをさらに明確にしてくれてありがとう! – amydot

関連する問題