javascriptの入力に追加したonclickイベントが適切に機能していません。
これまでの私のコードは次のようになります。
function order(option) {
if(option.checked) {
document.getElementId("col_order").value = document.getElementById("col_order").value + " " + option.value;
}
}
...//somewhere further down
for(var i = 0; i < options.length; i++) {
var check = document.createElement("input");
var label = document.createElement("label");
var description = document.createTextNode(options[i]);
check.type = "checkbox";
check.name = "order_list[]";
check.value = options[i];
check.onclick = "order(check)"; //Problem here
label.appendChild(check);
label.appendChild(description);
element.appendChild(label);
}
私も試しました:
check.onclick = (function() { var option = check; return function() {order(option);}})();
私が抱えている問題は、check.onlickのコード行です。これを通常のHTMLで追加すると、次のようになります。
<input type = "checkbox" name = "order_list[]" onclick = "order(this)" value = "randVal">randVal</input>
何の問題もありません。メソッドは意図した結果で実行されます。何かご意見は?
はっきりさせておきますが、order関数には問題なく到達しましたが、チェックボックスがクリックされただけなのに、ifステートメントに入ることがありません。
addEventListener
代わりに使用してください。動作するように見えても、forループにクロージャーがないため、各反復で同じ変数を上書きしているため、問題を回避するためにクロージャーを追加する可能性があります。
チェックボックスの場合、change
イベントをリッスンしますが、click
for(var j = 0; j < options.length; j++) {
(function(i) {
var check = document.createElement("input");
var label = document.createElement("label");
var description = document.createTextNode(options[i]);
check.type = "checkbox";
check.name = "order_list[]";
check.value = options[i];
check.addEventListener('change', function() {
if (this.checked) {
var col_order = document.getElementById("col_order");
col_order.value = col_order.value + " " + this.value;
}
}, false);
label.appendChild(check);
label.appendChild(description);
element.appendChild(label);
})(j);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加