JS - 删除表行不起作用?

时间:2014-02-24 19:31:09

标签: javascript html

我目前有一个添加和删除行。我已经为div的设计元素设置了它,但是当我尝试删除一行时它没有删除,我想知道你是否能够提供帮助。

请点击此处查看HTML代码!

http://jsfiddle.net/D77Dz/1/

<script language="javascript">
    function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;

        for(var i=0; i<colCount; i++) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
            //alert(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                    newcell.childNodes[0].value = "";
                    break;
                case "checkbox":
                    newcell.childNodes[0].checked = false;
                    break;
                case "select-one":
                    newcell.childNodes[0].selectedIndex = 0;
                    break;
            }
        }
    }

    function deleteRow(tableID) {
        try {
            var table = document.getElementById(tableID);
            var rowCount = table.rows.length;

            for(var i=0; i<rowCount; i++) {
                var row = table.rows[i];
                var chkbox = row.cells[5].childNodes[0];
                if (null != chkbox && true == chkbox.checked) {
                    if(rowCount <= 1) {
                        alert("Cannot delete all the rows.");
                        break;
                    }
                    table.deleteRow(i);
                    rowCount--;
                    i--;
                }
            }
        }catch(e) {
            alert(e);
        }
    }
</script>

3 个答案:

答案 0 :(得分:1)

此:

var chkbox = row.cells[5].childNodes[0];

应该是这样的:

var chkbox = row.cells[5].children[0].children[0];

你拥有它的方式,你指的是 TextNode

当您将其更改为.children[0]时,您会获得包含输入的DIV元素,因此您需要获取DIV的第一个子元素。

答案 1 :(得分:0)

您需要更改此行:

var chkbox = row.cells[5].childNodes[0];

为:

var chkbox = row.querySelector('input[type=checkbox]');

答案 2 :(得分:0)

你的问题在于引用deleteRow中的chkbox元素,这里:

var chkbox = row.cells[5].childNodes[0];

如果遇到问题,请尝试使用console.log跟踪潜在危险品行的代码。 在此示例中,console.log(chkbox)返回包装div,而不是预期的复选框。所以改为:

var chkbox = row.cells[5].childNodes[0].childNodes[0];

或使用queryselector

忘记整个长树遍历
var chkbox = row.querySelector('input[type=checkbox]');

查看工作小提琴http://jsfiddle.net/SpacePineapple/D77Dz/2/


P.S我看到你试图实现占位符(默认值)。您可能需要查看占位符

的html5规范