单击时,我的复选框不会检查

时间:2012-03-20 01:07:15

标签: javascript jquery html

我的桌子和复选框有另一个问题。我已经得到了我的javascript工作,它允许我的复选框检查我何时点击表格单元格内的任何地方。但是,现在复选框本身不起作用。我已经尝试解决这个问题超过一个小时了,无法在任何地方找到答案。这是我的javascript和它正在操作的html的片段:

function tdOnclick(td) {
    for(var i = 0; i < td.childNodes.length; i++) {
        if(td.childNodes[i].nodeName == "INPUT") {
            if(td.childNodes[i].checked) {
                td.childNodes[i].checked = false;
                td.style.backgroundColor = "#FAF4E3";
            } else {
                td.childNodes[i].checked = true;
                td.style.backgroundColor = "#E1E1E1";
            }
        }
    }
}

这是表格的一段html:

 <tr>
    <td><center>9:00 - 10:00</center></td>
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="mon09"></td>
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="tue09"></td>
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="wed09"></td>
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="thu09"></td>
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="fri09"></td>
 </tr>

4 个答案:

答案 0 :(得分:3)

实际上,我会冒险猜测它有效。您的点击是在复选框,然后onClick事件取消选中它。这是一个想法:

<input type="checkbox" name="free" value="mon09" onClick="this.checked=!this.checked;">

它有点脏,但它成功地忽略了点击。

工作TinkerBin

答案 1 :(得分:1)

如果我是一名殴打者,我猜你有双击事件。一个用于输入,一个用于父级。基本上你得到两次点击,有效地禁用你的输入。阅读此post。 像这样的概率可行。

<input type="checkbox" name="free" value="fri09" onclick="return false;" />

答案 2 :(得分:1)

您的点击是按预期复选复选框,然后系统会调用您的TD点击代码,您已切换回复选框。

这是一个jsfiddle,其中有一些评论显示正在发生的事情。 http://jsfiddle.net/NujXv/2/

您需要阻止事件从复选框冒泡到TD。我找到了这个搜索jquery函数 - http://api.jquery.com/event.stopPropagation。我在jsfiddle中放了一个注释掉的行可能有用,但我有真正的jquery经验,所以你可能需要调整一下。

答案 3 :(得分:0)

我遇到了同样的问题:

检查某处是否正在调用“preventDefault”,并检查复选框的click函数是否返回true,如果之前存在,则 preventDefault。

我用这样的东西解决它:

$("#recordlist").click( function(e) {
     if (e.target.name == 'recordlistitem'){ // When recordlistitem is a checkbox(es)
        return true;
     }
     e.preventDefault();
     // other stuff here
}