2013-01-21 80 views
2

我有一个jQuery函数,其中我计算在keyup上留下的字符。jQuery的textarea字符数(包括回车)

function charactersLeft(e) { 
    var textArea = e.data.textArea, 
      charLeft = e.data.maxLength - textArea.val().length, 
      message = e.data.messageContainer; 

    if (charLeft < e.data.warningLength) { 
     message.addClass('red').removeClass('green'); 
    } 
    else { 
     message.addClass('green').removeClass('red'); 
    } 

    message.text(charLeft); 
} 

这个工作正常,但它将回车计为一个字符而不是两个。由于回车符以'\ r \ n'的形式传递,因此传递给服务器时会导致问题。

我该如何修改我的代码,以便每当我按下回车键时,字符计数减2而不是1,并且在删除回车符时加2而不是1?

谢谢:)

回答

0

如果条件关闭?

把东西放在if(e.which==13){charLeft--}。 这将减去一个额外的计数。

+0

您好!感谢您的答复。我已经尝试过了,它在第一次尝试时有效,但不能用于成功回车。 (奇怪) – dork

+0

哦好吧,我知道为什么。这是因为我在调用charLeft--之前计算再次输入的字符; – dork

+0

是的,你必须坚持charLeft的值才能工作。 – beNerd

0

以下是您要找的代码。

下面的代码也被测试。

<script type="text/javascript" src="js/jquery.js"></script> 

<script type="text/javascript"> 

(function($) 
{ 
    $.fn.extend(
    { 
     limit: function(limit,element) 
     { 
      var interval, f; 
      var self = $(this); 

      $(this).focus(function() 
      { 
       interval = window.setInterval(substring,100); 
      }); 

      $(this).blur(function() 
      { 
       clearInterval(interval); 
       substring(); 
      }); 

      substringFunction = "function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}"; 
      if(typeof element != 'undefined') 
       substringFunction += "if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}" 

      substringFunction += "}"; 

      eval(substringFunction); 
      substring(); 
     } 
    }); 
})(jQuery); 

</script> 

<textarea id="myTextarea"></textarea> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $('#myTextarea').limit('140','#charsLeft'); 
    });  
</script> 
<div id="charsLeft"></div>