0

我正在向我的 ASP.NET 表中动态添加一些行,每行中有几个单元格,每个单元格都包含一个动态创建的控件:

            var TD = document.createElement('td');
        var spanCheck = document.createElement("span");
        spanCheck.innerHTML = "<input type='checkbox' name='vehicle' value='Car'>mycheck";
        spanCheck.id = "newfoodcheck0";
        spanCheck.onclick = function () {

            if (spanCheck.checked)
                alert('checked');
            else
                alert('unchecked');
        };

        TD.appendChild(spanCheck);

我正在为这个跨度添加一个 onclick 函数(呈现为一个复选框),我想知道它何时被选中,但if (spanCheck.checked)不起作用,我总是在我的警报中得到“未选中”,这里出了什么问题?我应该使用 spanCheck.checked 还是应该使用document.getElementById(spanCheck.id).checked?我已经测试过了,但再次没有运气!我怎么知道我的复选框是否被选中或知道?

4

2 回答 2

2

您正在做的是在 spanCheck 上添加点击事件并检查 spanCheck.checked。然而,checked 属性位于作为 spanCheck 的子元素的 input 元素上。您可能想要这样做:

var TD = document.createElement('td');
    var spanCheck = document.createElement("span");
    spanCheck.innerHTML = "<input id='my_input' type='checkbox' name='vehicle' value='Car'>mycheck";
    spanCheck.id = "newfoodcheck0";
    spanCheck.onclick = function () {
            var input = document.getElementById('my_input');
            if (input.checked)
                alert('checked');
            else
                alert('unchecked');
        };

另外,我认为您还没有将 TD 插入体内。所以在最后一行,你应该使用 appendChild:

TD.appendChild(spanCheck);    
document.body.appendChild(TD);

另一件事,您不应该在跨度上附加 onclick 事件。您应该在输入元素上附加相同的内容。下面的代码做同样的事情:

var TD = document.createElement('td');
    var spanCheck = document.createElement("span");
    spanCheck.innerHTML = "<input id='my_input' type='checkbox' name='vehicle' value='Car'>mycheck";
    spanCheck.id = "newfoodcheck0";

    TD.appendChild(spanCheck);
    document.body.appendChild(TD);
    var input = document.getElementById('my_input');

    input.onclick = function () {
        if (input.checked)
            alert('checked');
        else
            alert('unchecked');
    };
于 2013-02-28T09:24:37.980 回答
1

在您的代码中,spanCheck不呈现为复选框。它包含一个复选框。因此,没有这样的属性spanCheck.checked但是,有一个spanCheck.children[0].checked属性。

于 2013-02-28T09:09:57.870 回答