只允许某些按键

时间:2014-01-23 14:53:32

标签: javascript jquery

我有一个摘要框,一旦达到300个字符,我不希望用户能够再输入。问题是,使用我的代码,使用keydown函数我不能退格,删除,ctrl + a(全选)如果我想更改内容。有没有办法防止文本进入,但允许按键被用于这些目的?

function char_count(){
    limit = 300;
    current = $('#property_summary').val().length;
    $('#char_count').html(current + '/' + limit);
}

$('#property_summary').keyup(function(){
    char_count();
});

$('#property_summary').keydown(function(e){
    if( $('#property_summary').val().length == 300 ){
        e.preventDefault();
    }
});

3 个答案:

答案 0 :(得分:3)

也许这会有所帮助?

<textarea maxlength="300">
    Enter text here...
</textarea> 

您必须记住使用例如PHP:strlen()函数在服务器端验证。

基于评论的几句话: 我们应该尽可能地做,保持标准。操作系统的标准:CTRL-C用于复制,CTRL + V用于粘贴。 如果有人覆盖此设置,他几乎总是错误的 Javascript用于帮助而不是因为神经紧张。

如果maxlength设置为300,请进行一点注释:警告,您不能输入超过300个字符,请更正您的文字。 不需要破坏,同化和破坏用户文本。 这是我的意见,如果有人有另一个(我看到是的),请写一个评论。

PS。在这种情况下,最大长度是附加功能。因此,让浏览器“赶上”规范,并记住服务器端验证。

答案 1 :(得分:0)

我宁愿建议你使用这样的东西:

$('#property_summary').keyup(function () {

         var balchar = 300;
         if ($('#property_summary').val().length > balchar) {
             $('#property_summary').val($('#property_summary').val().substring(0, balchar))
         }
    });

这将删除300以上的字符。还有效退格和删除工作。

答案 2 :(得分:0)

$('#property_summary').keydown(function(e){
    if( $('#property_summary').val().length == 300 && e.keyCode != 8 && e.keyCode != 46 && !e.ctrlKey && !(e.ctrlKey && e.keyCode == 65)){
        e.preventDefault();
    }