Clickable Row&复选框冲突

时间:2011-04-18 10:07:19

标签: jquery checkbox clickable

我使用此功能点击了表格行

    $("#grid tbody tr").click(function () {
    var $checkbox = $(this).find(':checkbox');
    $checkbox.attr('checked', !$checkbox.attr('checked'));
});

并且它工作正常,但是当我尝试单击复选框self时,它不起作用。 我该怎么办才能使它们都有效?

5 个答案:

答案 0 :(得分:30)

使用单个事件处理程序:

$("#grid tbody tr").click(function(e) {
    if (e.target.type == "checkbox") {

        // stop the bubbling to prevent firing the row's click event
        e.stopPropagation();
    } else {
        var $checkbox = $(this).find(':checkbox');
        $checkbox.attr('checked', !$checkbox.attr('checked'));
    }
});

http://jsfiddle.net/karim79/UX2Fv/

答案 1 :(得分:5)

$('#grid tbody tr input:checkbox').click(function(e) {
    e.stopPropagation();
});

然后单击该复选框将不会触发tr上的单击事件。

答案 2 :(得分:2)

更好的是,你可以使用简单的HTML,在for

中写下label属性
<input type="checkbox" id="myCheck"><label for="myCheck">CheckThis</label>
                              ^                   ^

注意id的{​​{1}}将<input type="checkbox"

中的for属性值

DEMO

答案 3 :(得分:0)

这些答案一切正常,但我被困了很长时间才想弄清楚为什么我无法让他们上班。我正在动态生成表格行,但它们还没有存在于DOM中。因此,没有一种解决方案有效。

为我解决这个问题的方法是使用Typeclassopedia方法。

$('body').on('click', '#grid tbody  tr', function (e) {

答案 4 :(得分:0)

试试这个

$('#grid tbody tr input:checked').click(function(e) {
    e.stopPropagation();
});