2012-05-29 29 views
1

下面是我的代码,用于防止用户在输入框中键入超过10个字符,并向用户提供剩余字符的信息。检测用户在输入框中删除的时间

问题是,如果用户正在擦除他键入的内容(一个或多个字符),则字符数不会更新。

所以,我的问题是:如何检测用户是否在输入框中擦除?

在此先感谢!

$('.imageTitle').keypress(function(e) { 

     var value = $(this).val(), 
      valueLength = value.length, 
      set = 10, 
      remain = parseInt(set - valueLength); 

     if (remain <= 0 && e.which !== 0 && e.charCode !== 0) { 
      $('.imageTitle').val((value).substring(0, valueLength - 1)) 
     } 

     $('#titleCharsLeft').html('&nbsp' + remain); 
    }); 
+0

我不能正确地理解它,如果你有检测退格,为什么不检查其邀请码? – gopi1410

+0

如果我突出显示并删除文字,会发生什么情况?那么柜台会发生什么? –

+0

@ gopi1410:那个(和删除)涵盖大多数情况,但不是全部 - 是select + Ctrl-X是否被视为擦除? – Piskvor

回答

3

如果我没有记错,您不需要任何特殊的机制来检测擦除你可以做到这一点简单$.keyup。使用下面的代码。它会更新像Twitter一样的剩余字符,但您可以修改它以计算总字符数。

$("input[maxlength]").each(function() { 
    var $this = $(this); 
    var maxLength = parseInt($this.attr('maxlength')); 
    $this.attr('maxlength', null); 

    var el = $("<span class=\"character-count\">" + maxLength + "</span>"); 
    el.insertAfter($this); 

    $this.bind('keyup', function() { 
     var cc = $this.val().length; 

     el.text(maxLength - cc); 

     if(maxLength < cc) { 
      el.css('color', 'red'); 
     } else { 
      el.css('color', null); 
     } 
    }); 
});​ 

Working Fiddle

这是一个广义的其中一个应该让你开始。修改它以适应您的需要。

UPDATE

你甚至可以在支持它像浆糊,长按键或拖动事件浏览器添加了input事件的支持。像这样

var maxLength = 100; 
var supportOnInput = 'oninput' in document.createElement('input'); 
$('.imageTitle').on(supportOnInput ? 'input' : 'keyup',function(){ 
    var cc = $(this).val().length; 

     $('#titleCharsLeft').text(maxLength - cc); 

     if(maxLength < cc) { 
      $('#titleCharsLeft').css('color', 'red'); 
     } else { 
      $('#titleCharsLeft').css('color', 'black'); 
     } 
}); 
​ 

Modified Fiddle更适合您的需要。

参考:oninputthis

-1

只需使用Backspace键的键码。

退格的键码是50.

您的代码是这样的。

$('.imageTitle').keyup(function(e) { 

    var code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 50) { //backspace keycode 
       //Do something 
     } 
}); 
+0

不能始终工作。想象一下,我从输入中剪切文本... –

0

请问这是否适合您?

我改变keypress到​​并取消了对if声明了一些条件:

$('.imageTitle').keydown(function(e) { 

    var value = $(this).val(), 
     valueLength = value.length, 
     set = 10, 
     remain = parseInt(set - valueLength); 

    if (remain <= 0) { 
     $('.imageTitle').val((value).substring(0, set-1)) 
    } 

    $('#titleCharsLeft').html('&nbsp' + remain); 
});​ 

demo