我在奥雷利亚(Aurelia)有一个keydown.trigger的文本区域:
<textarea name="description" keydown.trigger="handleKeypress($event, $event.target.value)"
value.bind="desc" ></textarea>
在.js文件中,我有以下代码:
handleKeypress(event,newValue) {
let max = 3413;
let valueSize = new Blob([newValue]).size;
if (event.charCode >= 48 && event.charCode <= 57 || event.key === "Backspace") {
return true;
}
else {
event.onpaste = function(e){
e.clipboardData.getData('text/plain').slice(0, max);
};
if (valueSize>= max) {return false;}
}
return true;
}
因此,在textarea中,该字符的字符数不得超过3413个字节,因为在DB中,字节数是有限制的,因此在这里不能使用简单的maxlength。
此代码可以正常工作,不允许输入更多字符。它也不允许使用CTRL + V粘贴文本,只有在达到限制时才可以粘贴。
问题是,当尚未达到限制并且有人通过CTRL + V或右键单击粘贴长文本时-粘贴。然后粘贴内容,并且超出文本区域的限制。
我想实现textarea显示的字符数不超过限制
更新:我还尝试通过e.clipboardData.getData('text/plain').slice(0, max);
但是对于我来说,这没有任何作用。
答案 0 :(得分:3)
使用maxlength有什么问题?
我尝试过,它对我有用:
<template>
<textarea name="description" maxlength.bind="max" value.bind="desc"></textarea>
</template>
在视图模型中:
export class Test {
max = 3;
}
我在codeandbox中对此进行了测试,并且工作正常。参见https://codesandbox.io/embed/4zy4k5r3k7