优化 table 的 `row` 事件机制,若目标元素为 `checkbox,radio`,则不触发 `row` 事件

pull/1267/head
贤心 2023-05-30 09:53:23 +08:00
parent d8789d68d5
commit 7e51bce2a6
1 changed files with 20 additions and 6 deletions

View File

@ -2159,7 +2159,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
};
// 复选框选择(替代元素的 click 事件)
that.elem.on('click', 'input[name="layTableCheckbox"]+', function(){
that.elem.on('click', 'input[name="layTableCheckbox"]+', function(e){
var othis = $(this);
var td = othis.closest('td');
var checkbox = othis.prev();
@ -2181,6 +2181,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
} else {
that.setCheckData(index, checked);
that.syncCheckAll();
layui.stope(e);
}
// 事件
@ -2198,20 +2199,24 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
});
// 单选框选择
that.elem.on('click', 'input[lay-type="layTableRadio"]+', function(){
that.elem.on('click', 'input[lay-type="layTableRadio"]+', function(e){
var othis = $(this);
var td = othis.closest('td');
var radio = othis.prev();
var checked = radio[0].checked;
var index = radio.parents('tr').eq(0).data('index');
if(radio[0].disabled) return;
layui.stope(e);
if(radio[0].disabled) return false;
// 单选框选中状态
// 标注数据中的选中属性
that.setCheckData(index, checked, 'radio');
// 标注选中样式
that.setRowChecked({
type: 'radio',
index: index
});
}, true);
// 事件
layui.event.call(
@ -2237,7 +2242,16 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
var index = othis.index();
if(othis.data('off')) return; // 不触发事件
that.layBody.find('tr:eq('+ index +')').removeClass(ELEM_HOVER)
}).on('click', 'tr', function(){ // 单击行
}).on('click', 'tr', function(e){ // 单击行
// 不支持行单击事件的元素
var UNROW = '.layui-form-checkbox,.layui-form-radio,[lay-unrow]';
var container = $(this).find(UNROW);
if(
$(e.target).is(UNROW) ||
container[0] && $.contains(container[0], e.target)
){
return;
};
setRowEvent.call(this, 'row');
}).on('dblclick', 'tr', function(){ // 双击行
setRowEvent.call(this, 'rowDouble');