2013-03-12 41 views
5

我有一种形式,当按下键或从textarea文本粘贴和切割剩余字符的数量将出现,但在第一次按键功能不工作,但在第二个,所以它的确如此。我的代码如下。绑定不起作用第一KeyPress使用jQuery

$('.Textarea').keypress(function (event) { 
    if ($(this).is(':visible')) { 
     $(this).bind('paste copy cut keypress', function() { 
      var CharsLeft = $(this).parent('div').find('.CharsLeft'); 
      var Chars = $(this).val().length; 
      $('.CharsLeft').text(5000 - Chars); 
     }); 

     if (event.keyCode == 13) { 
      var Value = $(this).val(); 

      $(this).parent('div').find('.SubMessages').append('<div style="border-top:1px solid #EEE; padding:10px 0;">' + 'You: ' + Value + '</div>'); 
      $(this).val(''); 

      event.preventDefault(); 
     } 
    } 
}); 
<div class="Message" style="width:100%; text-align:left;"> 
    <div class="MsgInfo" style="display:block; border-bottom:1px solid #EEE;"> 
     <span class="InnerMsg">From: Tera</span> 
     <span class="InnerMsg">Subject: Welcome To Tera!</span> 

     <span class="InnerMsg">When: 2 Hours Ago</span> 
     <div style="clear:both;"></div> 
    </div> 
    <div class="UserMsgContent" style="display:block; padding:10px; line-height:1.5em;"> 
     <div class="SubMessages"> 
      <div style="padding:10px 0;">Hello</div> 
     </div> 
     <textarea style="width:930px;" class="Textarea" placeholder="Reply!" maxlength="5000"></textarea> 
     <div style="margin-top:10px;"> 
      <div class="CharsLeft">5000</div>Characters Left 
     </div> 
    </div> 
</div> 
+1

你能告诉我们你的html吗?什么是'这个'? – 2013-03-12 23:51:48

+0

它的一个textarea一秒 – 2013-03-12 23:52:03

回答

0
$(this).on("keypress", function() { 
    var CharsLeft = $(this).parent('div').find('.CharsLeft'); 
    var Chars = $(this).val().length; 

    $(CharsLeft).text(5000 - Chars);  
}); 

.on

+0

与 – 2013-03-12 23:56:12

+0

相同的东西什么是“这里” – PSR 2013-03-12 23:57:21

0

试试这个。

$(this).keypress(function() { 
    var CharsLeft = $(this).parent('div').find('.CharsLeft'); 
    var Chars = $(this).val().length; 

    $(CharsLeft).text(5000 - Chars);  
}); 
0

为什么在另一个$()中包装CharsLeft?

它应该是:

CharsLeft.text(5000 - Chars); 

而且,我相信,而不是.bind()(这是不建议使用),你应该使用。对()

这里是用该溶液的jsfiddle: http://jsfiddle.net/FzWaD/

夫妇还包括更多的错误修复。

5

使用keyup改为读取keypress上的值的长度并不能提供正确的文本长度。

当您按下按键时,keypress事件会触发,但您的textarea尚未使用新文本进行更新,直到释放密钥为止。使用keyup,类似如下:

$(this).bind('paste copy cut keyup', function() { 
    var CharsLeft = $(this).parent('div').find('.CharsLeft'); 
    var Chars = $(this).val().length; 

    $(CharsLeft).text(5000 - Chars);  
}); 

DEMO - 使用KEYUP代替


我在DEMO唯一改变的是结合选择器$('.Textarea').bind()得到它的工作,小提琴作为$(this)不会在小提琴中工作。

+0

谢谢!工作!我想知道发生了什么事。 – 2013-03-13 00:00:30