首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为元素内的复选框创建标签

为元素内的复选框创建标签
EN

Stack Overflow用户
提问于 2012-09-25 22:47:52
回答 2查看 8.2K关注 0票数 4

我尝试动态创建行,问题是当我使用javascript动态添加带有标签的复选框时不起作用。但是,我在默认情况下使用Html创建的应用程序运行正常。

事实上,我希望我添加的图像(on.png / off.png)替换复选框。当我只使用html (checkbox + label)时,代码可以工作,但现在我只想用Javascript创建元素,我可以抓取标签,但当我单击它时,它就不工作了。

这是我所有的代码:

Main.html

代码语言:javascript
运行
复制
 <HTML>
 <HEAD>
<TITLE>  </TITLE>
<link rel="stylesheet" type="text/css" href="style.css" />
<SCRIPT language="javascript">
    function addRow(tableID) {

        var table = document.getElementById(tableID);

        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);

        var cell1 = row.insertCell(0);
        var element1 = document.createElement("input");
        element1.type = "checkbox";
        element1.id =  "id2" ;
        cell1.appendChild(element1);

        // Create label
        var label = document.createElement("label");
        label.for =  "id2" ;
        cell1.appendChild(label);

        var cell2 = row.insertCell(1);
        cell2.innerHTML = rowCount + 1;

        var cell3 = row.insertCell(2);
        var element2 = document.createElement("input");
        element2.type = "text";
        cell3.appendChild(element2);


    }

    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[0].childNodes[0];
            if(null != chkbox && true == chkbox.checked) {
                table.deleteRow(i);
                rowCount--;
                i--;
            }

        }
        }catch(e) {
            alert(e);
        }
    }

</SCRIPT>
 </HEAD>
<BODY>
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />

<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />

<TABLE id="dataTable" width="350px" border="1">
    <TR>
        <TD><INPUT type="checkbox" name="chk"  id="id1" /> <label for="id1" > </label>   </TD>
        <TD> 1 </TD>
        <TD> <INPUT type="text" /> </TD>
    </TR>
  </TABLE>
</BODY>
</HTML>

style.css

代码语言:javascript
运行
复制
 input[type=checkbox] {
  display:none;
}

 input[type=checkbox] + label
 {
   background: url(images/off.png) no-repeat;
   height: 64px;
   width: 64px;
   display:inline-block;
   padding: 0 0 0 0px;
 }

  input[type=checkbox]:checked + label
 {
    background: url(images/on.png) no-repeat;
    height: 64px;
    width: 64px;
    display:inline-block;
    padding: 0 0 0 0px;
  }

请帮帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-25 22:50:18

改变这一点

代码语言:javascript
运行
复制
label.for =  "id2" ;

到这个

代码语言:javascript
运行
复制
label.htmlFor =  "id2" ;

因为一些JavaScript实现不允许关键字/保留字作为对象属性,所以必须为for属性做一个变通办法,所以他们选择了htmlFor

.class也有类似的情况,这就是他们使用.className的原因。

票数 8
EN

Stack Overflow用户

发布于 2012-09-25 22:49:50

您的问题是第17行,应该是label.htmlFor = "id2";label.for = "id2" ;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12585496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档