有没有办法创建一个内容可编辑的 div,用户不能选择/突出显示内容但仍然可以输入内容?我想创建一个界面,用户被迫逐键删除和输入内容,而无法通过突出显示进行大量编辑。
我研究了 CSS 中“用户选择”属性的各种形式,它适用于静态内容,但似乎不适用于内容可编辑的元素/输入。
有任何想法吗?
谢谢
有没有办法创建一个内容可编辑的 div,用户不能选择/突出显示内容但仍然可以输入内容?我想创建一个界面,用户被迫逐键删除和输入内容,而无法通过突出显示进行大量编辑。
我研究了 CSS 中“用户选择”属性的各种形式,它适用于静态内容,但似乎不适用于内容可编辑的元素/输入。
有任何想法吗?
谢谢
如果您可以接受 atextarea
而不是 contenteditable div
,则可以执行以下操作:
window.onload = function () {
var div = document.getElementById('div');
if (div.attachEvent) {
div.attachEvent('onselectstart', function (e) {
e.returnValue = false;
return false;
});
div.attachEvent('onpaste', function (e) {
e.returnValue = false;
return false;
});
} else {
div.addEventListener('paste', function (e) {
e.preventDefault();
});
div.addEventListener('select', function (e) {
var start = this.selectionStart,
end = this.selectionEnd;
if (this.selectionDirection === 'forward') {
this.setSelectionRange(end, end);
} else {
this.setSelectionRange(start, start);
}
});
}
};
HTML:
<form>
<textarea id="div"></textarea>
</form>
对代码的一些观察:
onselect
仅针对. 这是与您的 HTML 不同的原因。input
textarea
form
selectionDirection
,这就是为什么 IE 的遗留事件处理模型也用于这些浏览器。div
。编辑
看来我也完成了你的“功课”。
我知道你想禁用批量删除,但如果其他人不想显示突出显示颜色(这将user-select: none
用于其他元素),你可以在你的 css 中输入以下内容:
::selection { background: transparent }
这将使选择看起来像user-select: none
,但它仍然允许批量删除。但它可能会让用户认为没有选择,所以他们可能不会批量删除。
希望这对你有用,但主要是对其他人。