*これは、forループ内のより大きなコードブロック内で発生しています。ループ全体については、ポストの終わりを参照してください。コンテキスト変数を引数としてonclickイベントハンドラに渡す
この件に関する投稿のすべてを読みましたが、まだ失われています。
私はonclickイベントをチェックボックスに割り当てようとしています。 onclickイベントに割り当てられている関数は、チェックボックスが定義されているスコープで使用可能な変数(idvariable)にアクセスできる必要があります。
var idvariable = parentChildList[i].children[j]["subjectid"];
var input = document.createElement("input");
input.type = "checkbox";
input.value = "";
input.onclick = function() {
return clicked(idvariable);
};
function clicked(id) {
alert(id);
};
私は、インラインと名前の関数のすべてのバリエーションを試してみたが、私はクリックされた関数にidvariableへのアクセス権を与える方法を見つけ出すことはできません。上記の例では、その変数の値は未定義です。
それとも、私はこの方法でそれをしようとした場合:var input = document.createElement("input");
input.type = "checkbox";
input.value = "";
var idvariable = parentChildList[i].children[j]["subjectid"];
input.onclick = function (idvariable) {
return clicked(idvariable);
};
function clicked(id) {
alert(id);
};
は、私が言う警告を取得[オブジェクトのMouseEvent]。私は、onclickイベントに割り当てるよ、私はメソッド名から()削除下記と同じ:
var idvariable = parentChildList[i].children[j]["subjectid"];
input.onclick = function() {
return clicked;
}(idvariable);
function clicked(id) {
return alert(id);
};
*ループ全体:
for (var i = 0; i < parentChildList.length; i++) {
var row = table1.insertRow(-1);
var cell = row.insertCell(0);
cell.innerHTML =
"<h4 class=\"panel-title\"><a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapse" + i + "\">" + parentChildList[i]["title"] + "</a></h4>";
if (parentChildList[i].children.length > 0) {
var row2 = table1.insertRow(-1);
var cell2 = row2.insertCell(0);
var table2 = document.createElement("table");
table2.className = "collapse";
table2.id = "collapse" + i;
cell2.appendChild(table2);
for (var j = 0; j < parentChildList[i].children.length; j++) {
var row3 = table2.insertRow(-1);
var cell3 = row3.insertCell(0);
var div = document.createElement("div");
div.className = "checkbox";
var label = document.createElement("label");
label.innerText = parentChildList[i].children[j]["title"];
var input = document.createElement("input");
input.type = "checkbox";
input.value = "";
input.setAttribute('subj', idvariable);
var idvariable = parentChildList[i].children[j]["subjectid"];
alert(idvariable);
input.onclick = function() {
return clicked(this.getAttribute('subj'));
};
function clicked(id) {
return alert(id);
};
cell3.style.padding = "0px 0px 0px 10px";
cell3.style.fontsize = "x-small";
cell3.appendChild(div);
div.appendChild(label);
label.insertBefore(input, label.childNodes[0]);
}
}
}
明らかにここには表示されていないコードがあります。私はループでこれをやっていると思いますが、一般的にカウンターとして使われる 'i'と' j'変数に基づいています。それは答えに影響を与える重要な詳細です。 –
それは正しいマイクです。私は、このコードの動作に影響することを認識していませんでした。 –
大きなコードスニペットで更新されました。 –