通过一个';s Self to OnClick事件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

我在javascript中添加到输入的点击事件没有以正确的方式工作
到目前为止,我的代码如下所示:

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);
}