2013-01-21 71 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>