jQuery .on()tr单击事件使用.not()on tr复选框单击?

时间:2014-08-27 16:08:23

标签: javascript jquery checkbox click live

所以我的标题可能令人困惑,但它有正确的细节。我有一个可点击行的表。单击该行时,该行突出显示。该表还有一个复选框列。 单击该复选框不应突出显示或删除该行中的突出显示。如何正确使用.not()或:不在.on('click','tr',function(){。 ..})? http://jsfiddle.net/vmu0p2oe/

$('table').on('click', 'tr', function () {
                if ($(this).hasClass('selected')) {
                    $(this).removeClass('selected');
                    //$(this).find(":checkbox").prop("checked", false);
                }
                else {
                    $('tr.selected').removeClass('selected');
                    $(this).addClass('selected');
                    //$(this).find(":checkbox").prop("checked", true);
                }

            });

3 个答案:

答案 0 :(得分:7)

将其添加到处理程序的开头:

if($(e.target).is('input[type=checkbox]')) {
    return;
}

如果单击的元素是复选框,这将阻止处理程序运行。

小提琴:http://jsfiddle.net/vmu0p2oe/1/

答案 1 :(得分:1)

为使用stopPropagation()的复选框添加处理程序,以防止点击冒出tr

$('table').on('click', ':checkbox', function(e) {
    e.stopPropagation();
});

DEMO

答案 2 :(得分:0)

这个怎么样:

$('table').on('click', 'tr', function (e) {
  var el = e.target;
  if ( el.type !== "checkbox"){
    if ($(this).hasClass('selected')) {
         $(this).removeClass('selected');
         //$(this).find(":checkbox").prop("checked", false);
    } else {
         $('tr.selected').removeClass('selected');
         $(this).addClass('selected');
         //$(this).find(":checkbox").prop("checked", true);
    }
  }
});

fiddle