【发布时间】:2012-08-12 03:55:42
【问题描述】:
我有一个表格,我添加了一些多项选择功能,其中 shift + click 在第一次单击和第二次单击之间选择行,但最终突出显示行之间的所有文本。
我不想通过 CSS 禁用文本选择,因为这些东西确实需要可选,而不是当我的多选功能触发时 shift + click 时。
这个可以吗?
var lastChecked;
$("#contact_table tr").click(function(e) {
if (e.target.getAttribute('type') == 'checkbox') {
return;
};
if (e.shiftKey && lastChecked) {
// select between last point and new point
var tableRows = $("#contact_table tr");
var newRow = tableRows.index($(this));
var oldRow = tableRows.index(lastChecked);
if (oldRow < newRow) {
newRow = newRow +1;
}
var sliceRange = [newRow, oldRow].sort();
var selectedRows = tableRows.slice(sliceRange[0], sliceRange[1])
.find('input[type=checkbox]').attr('checked', true);
} else {
var checkbox = $(this).find('input[type=checkbox]');
var checked = toggleCheckbox(checkbox);
if (checked) {
lastChecked = $(this);
}
};
recalculateSelectedButton();
});
【问题讨论】:
-
可以分享一下你的多选功能吗?我认为您应该能够阻止事件处理程序中的默认行为。
-
@PJH 刚刚添加了它!谢谢:)
-
@JoelPurra 是的,我在帖子中引用了该方法。我很好奇是否有一个 JS 事件可以劫持这种行为,而不是临时动态设置 CSS(我什至不确定这是否可行,因为点击已经开始)。
-
@YujiTomita:你是对的。我误读了!
标签: javascript html css