通过一个';s Self to OnClick事件JavaScript
我在javascript中添加到输入的点击事件没有以正确的方式工作通过一个';s Self to OnClick事件JavaScript,javascript,html,function,checkbox,parameters,Javascript,Html,Function,Checkbox,Parameters,我在javascript中添加到输入的点击事件没有以正确的方式工作 到目前为止,我的代码如下所示: function order(option) { if(option.checked) { document.getElementId("col_order").value = document.getElementById("col_order").value + " " + option.value; } } ...//somewhere further dow
到目前为止,我的代码如下所示:
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.onlick行。当我将其与普通HTML一起添加时:
<input type = "checkbox" name = "order_list[]" onclick = "order(this)" value = "randVal">randVal</input>
randVal
我没有任何问题;该方法以预期结果执行。有什么想法吗?让我澄清一下:我很好地使用了order函数,但是我从来没有进入if语句,即使复选框刚刚被单击了
check.onclick=“order(check)”代码>将字符串指定为单击处理程序。那不行;浏览器需要一个功能
:
check.onclick = function() {
order(check);
}
改用addEventListener
,即使它看起来应该可以工作,但每次迭代都会覆盖相同的变量,因为for循环中没有闭包,所以我可能会添加闭包来避免问题
要查看复选框,您将侦听更改
事件,而不是单击
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);
}
for(var j=0;j
有什么问题吗?onclick属性的值应该是函数,而不是字符串。@danrodi现在检查文章的底部,我添加了它,对不起@这不是问题所在,我对函数做得很好。当然,但它应该是一个函数,而不是一个字符串,因为这将是一种使它工作的方法(再加上修复.getElementById()
typo)。我对函数做得很好,但我从未在if语句中做过。使用console.log(检查)
确保您确实有一个a复选框,然后console.log(check.checked)
查看这是否是有效属性及其值。您上面发布的代码看起来正确(请参阅);我猜错误在其他地方。当我这么做时,我收到了“[object HTMLInputElement]”,对于check.checked,我收到了“true”,对于check.value,我得到了我选择的值。相反,添加事件侦听器没有帮助,我已经可以使用我拥有的代码将其添加到函数中。我甚至没有进入函数中的if语句,这就是我感到困惑的地方。@timtour97-编辑答案,尝试侦听更改事件,并在事件中使用this
handler@timtour97-还有一个输入错误,您编写了getElementId
,这是错误的
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);
}