jquery 点击tr选中checkbox,解决checkbox的默认点击事件被阻止的问题
1.第一种,!$(event.target).is('input'),判断触发事件的元素是否为input。此时使用event.target,而不是this,获取事件本身,防止触发事件冒泡的问题。
$("#data_table tr").on("click",function (event) { if (!$(event.target).is('input')) { $('input:checkbox', this).prop('checked', function (i, value) { return !value; }); } })
注释:event.target属性的作用是获取到出发事件的元素。网上说使用event.target,在ie下可能会出现版本不兼容问题,我在ie11下进行测试,发现是可以的。所以应该是, jQuery对其封装后,避免了W3C、IE和safari浏览器不同标准的差异。若出现不兼容问题,可尝试使用如下方式。
var thisEvent = window.event || event; var targetEvent = thisEvent.srcElement; if (!targetEvent) { targetEvent = thisEvent.target; }
2.第二种,跳过checkbox所在列。本次示例是位于第一列,因此给除第一个td之外的td绑定点击选中事件。
//直接使用not("td:first-child"),或者设置第一列td类为.tdcolFirst,即.not(".tdcolFirst")。效果是一致的
$(".tr_check td").not("td:first-child").bind("click", function () { $(this).parent().find("input:checkbox").prop('checked', function (i, value) { return !value; }); })
3.event下的部分常用属性或方法:
方法/属性
|
类型
|
作用
|
event.preventDefault()
|
方法
|
阻止默认的事件行为。
|
event.stopPropagation()
|
方法
|
阻止事件的冒泡。
|
event.type
|
属性 |
返回当前触发事件的事件类型。
|
event.target
|
属性
|
获取执行事件【出发事件】的元素。 |
event.relatedTarget
|
属性
|
返回当触发时,该事件所涉及到的其他dom元素。
|
event.pageX/event.pageY
|
属性
|
获取光标相对页面的x坐标和y坐标。 |
event.which
|
属性
|
鼠标单击事件中,获取鼠标的左、中、右键,在键盘事件中获取键盘所在按钮。1 鼠标左键 2 鼠标中键 3 鼠标右键
|
event.originalEvent
|
属性
|
指向原始的事件对象。
|