Javascript 对于textbox/textarea,在键入时限制输入长度,但在粘贴时不限制输入长度
我有一个奇怪的要求:Javascript 对于textbox/textarea,在键入时限制输入长度,但在粘贴时不限制输入长度,javascript,jquery,html,Javascript,Jquery,Html,我有一个奇怪的要求: function TextLimit(elem, maxChars) { ... } 其中elem是一个textarea或type=text的输入,maxChars是可以进入elem的最大字符数。当用户键入时,函数中的代码必须将elem中的文本长度限制为maxChars。但是,如果用户是第一次粘贴,即使粘贴的文本的字符数大于maxChars,elem也必须获取粘贴的所有内容。 编辑:如果粘贴的文本比maxChars长,则在第一次粘贴后,用户不能再键入/粘贴,除非文本被删除
function TextLimit(elem, maxChars) { ... }
其中elem是一个textarea或type=text的输入,maxChars是可以进入elem的最大字符数。当用户键入时,函数中的代码必须将elem中的文本长度限制为maxChars。但是,如果用户是第一次粘贴,即使粘贴的文本的字符数大于maxChars,elem也必须获取粘贴的所有内容。
编辑:如果粘贴的文本比maxChars长,则在第一次粘贴后,用户不能再键入/粘贴,除非文本被删除/退格到比maxChars短的长度
任何使用纯JavaScript或jQuery的建议都将不胜感激
maxlenght属性不允许粘贴。在粘贴时以编程方式设置/删除它并不适用于所有浏览器。在keydown/keypress/keypup上获取elem值的子字符串会产生一些令人不快的结果。类似的方法似乎有效: 还有几件事需要解决,比如在达到最大值时允许删除键。不过,这应该很容易解决 试试看:(更新)
函数文本限制(元素、最大字符){
var permittedKeys=[8,37,38,39,40,46];
要素焦点(函数(){
if(elem.val().length>=maxChars){
要素数据(“防止”,真实);
elem.data('value',elem.val());
}
});
元素模糊(函数(){
if(元素数据(‘防止’)){
元素值(元素数据(‘值’);
}
});
元素键控(功能(事件){
var count=elem.val().length;
如果(计数>=maxChars&$.inArray(event.which,permittedKeys)<0){
要素数据(“防止”,真实);
elem.data('value',elem.val());
返回false;
}否则{
要素数据(“防止”,错误);
}
});
}
TextLimit($('myTextarea'),30);
函数文本限制(元素、最大字符){
var permittedKeys=[8,37,38,39,40,46];
要素焦点(函数(){
if(elem.val().length>=maxChars){
要素数据(“防止”,真实);
elem.data('value',elem.val());
}
});
元素模糊(函数(){
if(元素数据(‘防止’)){
元素值(元素数据(‘值’);
}
});
元素键控(功能(事件){
var count=elem.val().length;
如果(计数>=maxChars&$.inArray(event.which,permittedKeys)<0){
要素数据(“防止”,真实);
elem.data('value',elem.val());
返回false;
}否则{
要素数据(“防止”,错误);
}
});
}
TextLimit($('myTextarea');
谢谢你,Patrick。但是,这并不是我想要的。如果粘贴的文本比maxChars长,那么用户就不能再输入了,无论是通过键入还是通过粘贴。让我修改我的问题来反映这一点。@Patrick-Backspace有一种古怪的行为,如果我突出显示所有粘贴的输入,然后对其进行Backspace,我就不能键入/粘贴任何内容除非我在一个空的文本区域上再次点击backspace,否则,代码似乎限制为maxChars+1,否则,我想你已经接近了。我喜欢它不使用粘贴事件的方式:)@dimskiy-我已经做了一些更改,但会再看一看。我只测试了删除,没有退格。几分钟后回来…@dimskiy-更新并简化了一点。试试看@帕特里克-我感谢你的帮助。我要离开办公室了,几个小时后我会在家里检查一下。非常感谢。
function TextLimit(elem, maxChars) {
var permittedKeys = [8,37,38,39,40,46];
elem.focus(function() {
if(elem.val().length >= maxChars) {
elem.data('prevent', true);
elem.data('value', elem.val());
}
});
elem.blur(function() {
if( elem.data('prevent') ) {
elem.val( elem.data('value') );
}
});
elem.keydown(function(event) {
var count = elem.val().length;
if(count >= maxChars && $.inArray(event.which, permittedKeys) < 0) {
elem.data('prevent', true);
elem.data('value', elem.val());
return false;
} else {
elem.data('prevent', false);
}
});
}
TextLimit($('#myTextarea'), 30);
function TextLimit(elem, maxChars) {
var permittedKeys = [8,37,38,39,40,46];
elem.focus(function() {
if(elem.val().length >= maxChars) {
elem.data('prevent', true);
elem.data('value', elem.val());
}
});
elem.blur(function() {
if( elem.data('prevent') ) {
elem.val( elem.data('value') );
}
});
elem.keydown(function(event) {
var count = elem.val().length;
if(count >= maxChars && $.inArray(event.which, permittedKeys) < 0) {
elem.data('prevent', true);
elem.data('value', elem.val());
return false;
} else {
elem.data('prevent', false);
}
});
}
TextLimit($('#myTextarea');