通过 javascript 在每次点击时动态禁用文本选择
Disable text selection dynamically per click via javascript?
我有一个表格,我添加了一些多项选择功能,其中 shift + 单击在第一次单击和第二次单击之间选择行,但它最终突出显示行之间的所有文本。
我不想通过 CSS 禁用文本选择,因为这些东西确实需要可选,只是当我的多选函数触发时 shift + 单击时不是。
这能做到吗?
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();
});
您可以使用 javascript 取消选择所有文本;在运行多选逻辑后添加对RemoveSelection()
的调用。
从 http://help.dottoro.com/ljigixkc.php 到清除火狐中的选择
function RemoveSelection () {
if (window.getSelection) { // all browsers, except IE before version 9
var selection = window.getSelection ();
selection.removeAllRanges ();
}
else {
if (document.selection.createRange) { // Internet Explorer
var range = document.selection.createRange ();
document.selection.empty ();
}
}
}
您可以尝试根据选中复选框的数量禁用用户选择。如果有,只需将 CSS 样式user-select: none;
(和前缀版本)添加到#contact_table
中即可。
如果您提供带有当前 javascript 代码和表的 jsfiddle,我也会测试代码 - 现在它按原样;)我不确定点击互动将如何与任何取消的事件冒泡等一起发挥作用。此外,此实现没有考虑到用户可能想要选择文本,即使有一个选中的复选框(因此它可能不是你要查找的)。
$(function() {
var $contactTable = $("#contact_table"),
userSelectNoneClass = "user-select-none";
$contactTable.on("change", ":checkbox", function(e) {
var numberOfCheckedRows = $("#contact_table :checkbox:checked").length,
anyCheckedRows = (numberOfCheckedRows > 0);
if (anyCheckedRows && $contactTable.hasClass(userSelectNoneClass)) {
$contactTable.addClass(userSelectNoneClass);
} else {
$contactTable.removeClass(userSelectNoneClass);
}
});
});
.user-select-none
{
/* From https://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
编辑:改用更改事件。
相关文章:
- createjs动态文本重叠
- 在 JavaScript 中添加动态文本
- 动态文本大小JavaScript在IE中不起作用
- 使用Date.parse();从动态文本中删除(或允许)序数字符;
- 用动态文本和动态大小填充多边形
- Javascript/jQuery链接/href补充的动态文本
- 通过javascript的动态文本框
- 动态文本的 SVG 线条动画
- 动态文本区域的Javascript验证
- 通过jquery验证动态文本
- 将单击按钮时的动态文本区域值传递给javascriptphp
- 如何将动态文本框值分配给相应的模型
- 如何创建动态文本并使用 KineticJS 对其进行编辑.任何可以说明的例子都会很棒
- 使用颜色选取器更改所选动态文本框的文本颜色
- 发布多个动态文本框值
- 从选定的对象获取动态文本 - (通过 ID 和“活动”类) - jQuery
- 动态文本区域高度
- 为动态文本框创建新的会话变量
- PHP 邮件中的动态文本框
- 钛应用器动态文本区域高度增加