質問のタイトルが少しわかりにくい場合は申し訳ありませんが、問題の言い方が正確にわかりません。
次の同期ajax呼び出しがあります(その目的はjsonファイルの内容を取得することです)。
$.ajax({
url: "/JsonControl/Events.json",
dataType: 'json',
async: false,
success: function(jsonObj)
{
for (var i = 0; i < jsonObj.events.length; ++i)
{
if(day == jsonObj.events[i].dateNumber && (navDate.getMonth() + monthAdjust) == (jsonObj.events[i].dateMonth -1) && navDate.getFullYear() == jsonObj.events[i].dateYear)
{
document.getElementById("cGrid" + gridMod).className="eventDay";
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = (jsonObj.events[i].title);}
document.getElementById("cGrid" + gridMod).style.backgroundColor = "#336633";
isAnEvent = true;
}
}
}
});
私が抱えている問題は、次の行にあります('$ .ajax({'が1行目である場合は12行目):
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = (jsonObj.events[i].title);}
クロージャが必要だと言われましたが、構文がそのように設定されているのを見たことがなく、試した例が機能しないため、見た例の先頭または末尾を作成できません( 「機能しない」の意味について詳しく説明してください)。
これが私が試みたものです(上記の関連行を以下に示すこの行に置き換えました)。
(function(index) {
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = jsonObj.events[index].title;}
})(i);
私が得るエラーはこれです:
Uncaught TypeError: Cannot call method 'getElementById' of undefined
このエラーは、元の問題の行と、上記の置換行で発生します。
この自己実行関数はかなり新しいものだと思うので、どうすればよいかわかりません。
'jsonObj.events [i] .title'を文字通りプロットする代わりに、アクセス時のjsonObj.events[i].titleの実際の値をプロットする方法に関するアドバイスをいただければ幸いです。
また、valueOfメソッドを試してみましたが(私が推測したように)、簡単な調査により、ブール値の値を返すだけであることがわかりました。