在textarea中计数字符

我想在textarea中计算字符,所以我只是提出:

<textarea id="field" onkeyup="countChar(this)"></textarea> function countChar(val){ var len = val.value.length; if (len >= 500) { val.value = val.value.substring(0, 500); } else { $('#charNum').text(500 - len); } }; 

我的代码有什么问题? 这是行不通的! 那么这是一个新手笔迹,需要帮助。

你在浏览器中看到什么错误? 我可以理解,为什么你的代码不工作,如果你张贴的是不完整的,但不知道我不知道肯定。

 <!DOCTYPE html> <html> <head> <script src="jquery-1.5.js"></script> <script> function countChar(val) { var len = val.value.length; if (len >= 500) { val.value = val.value.substring(0, 500); } else { $('#charNum').text(500 - len); } }; </script> </head> <body> <textarea id="field" onkeyup="countChar(this)"></textarea> <div id="charNum"></div> </body> </html> 

…对我来说工作得很好。

编辑:你可能应该清除charNum div,或者写一些东西,如果他们超过限制。

基于Caterhamfunction的改进版本:

 $('#field').keyup(function () { var max = 500; var len = $(this).val().length; if (len >= max) { $('#charNum').text(' you have reached the limit'); } else { var char = max - len; $('#charNum').text(char + ' characters left'); } }); 

接受的解决scheme是有缺陷的。

这里有两种情况下keyup事件不会被触发:

  1. 用户将文本拖到textarea中。
  2. 用户通过右键单击(上下文菜单)复制粘贴textarea中的文本。

使用HTML5 input事件代替更强大的解决scheme:

 var textarea = document.querySelector("textarea"); textarea.addEventListener("input", function(){ var maxlength = this.getAttribute("maxlength"); var currentLength = this.value.length; if( currentLength >= maxlength ){ console.log("You have reached the maximum number of characters."); }else{ console.log(maxlength - currentLength + " chars left"); } }); 

这对我来说工作得很好。

 $('#customText').on('keyup', function(event) { var len = $(this).val().length; if (len >= 40) { $(this).val($(this).val().substring(0, len-1)); } }); 

HTML示例,在我需要计数器的地方使用,注意textarea和第二个span的id="post"的相关性: id="post" < – > id="rem_post"和每个特定文本区

 <textarea class="countit" name="post" id="post"></textarea> <p> <span>characters remaining: <span id="rem_post" title="1000"></span></span> </p> 

JavaScript函数通常放在我模板文件的</body>之前,需要jQuery

 $(".countit").keyup(function () { var cmax = $("#rem_" + $(this).attr("id")).attr("title"); if ($(this).val().length >= cmax) { $(this).val($(this).val().substr(0, cmax)); } $("#rem_" + $(this).attr("id")).text(cmax - $(this).val().length); }); 

substring()需要变成substr()

例如: jsfiddle.net/xqyWV

那么,这与已经说过的没有什么不同,但是在所有的浏览器中都能很好地工作。

这个想法是删除任何溢出定义长度的文本。

 function countTextAreaChar(txtarea, l){ var len = $(txtarea).val().length; if (len > l) $(txtarea).val($(txtarea).val().slice(0, l)); else $('#charNum').text(l - len); } 

HTMl代码将是:

 <div id="charNum"></div> <textarea onkeyup="countTextAreaChar(this, 10)" class="textareaclass" id="smallword" rows="40" cols="30" name="smallword"></textarea> 

我做了以上的组合。 它允许停止文本input,并允许退格,加上保持计数,即使退格:

JavaScript代码:

 $(document).ready(function () { $('#giftmsg').keypress(function (event) { var max = 250; var len = $(this).val().length; if (event.which < 0x20) { // e.which < 0x20, then it's not a printable character // e.which === 0 - Not a character return; // Do nothing } if (len >= max) { event.preventDefault(); } }); $('#giftmsg').keyup(function (event) { var max = 250; var len = $(this).val().length; var char = max - len; $('#textleft').text(char + ' characters left'); }); }); 

HTML:

 <div class="col3"> <h2>3. Optional gift message</h2> Enter gift message. Limit 250 characters.<br /><br /> <textarea cols="36" rows="5" id="giftmsg" ></textarea> <a style="padding:7px 0 0 0" href="#">Save Message</a> <div id="textleft">250 characters left</div> </div> 

信用在我面前的海报! 希望这可以帮助别人!

HTML

 <form method="post"> <textarea name="postes" id="textAreaPost" placeholder="Write what's you new" maxlength="500"></textarea> <div id="char_namb" style="padding: 4px; float: right; font-size: 20px; font-family: Cocon; text-align: center;">500 : 0</div> </form> 

jQuery的

 $(function(){ $('#textAreaPost').keyup(function(){ var charsno = $(this).val().length; $('#char_namb').html("500 : " + charsno); }); }); 

我为这个任务创build了自己的jQuery插件,你可以在这里试试:

http://jsfiddle.net/Sk8erPeter/8NF4r/

您可以即时创build字符计数器(以及其他字符计数器),您可以定义是否要剪切文本,可以定义后缀文本,还可以定义短格式及其分隔符。

这是一个示例用法:

 $(document).ready(function () { $('#first_textfield').characterCounter(); $('#second_textfield').characterCounter({ maximumCharacters: 20, chopText: true }); $('#third_textfield').characterCounter({ maximumCharacters: 20, shortFormat: true, shortFormatSeparator: " / ", positionBefore: true, chopText: true }); $('#fourth_textfield').characterCounter({ maximumCharacters: 20, characterCounterNeeded: true, charactersRemainingNeeded: true, chopText: false }); $('#first_textarea').characterCounter({ maximumCharacters: 50, characterCounterNeeded: true, charactersRemainingNeeded: false, chopText: true }); $('#second_textarea').characterCounter({ maximumCharacters: 25 }); }); 

这里是插件的代码:

 /** * Character counter and limiter plugin for textfield and textarea form elements * @author Sk8erPeter */ (function ($) { $.fn.characterCounter = function (params) { // merge default and user parameters params = $.extend({ // define maximum characters maximumCharacters: 1000, // create typed character counter DOM element on the fly characterCounterNeeded: true, // create remaining character counter DOM element on the fly charactersRemainingNeeded: true, // chop text to the maximum characters chopText: false, // place character counter before input or textarea element positionBefore: false, // class for limit excess limitExceededClass: "character-counter-limit-exceeded", // suffix text for typed characters charactersTypedSuffix: " characters typed", // suffix text for remaining characters charactersRemainingSuffixText: " characters left", // whether to use the short format (eg 123/1000) shortFormat: false, // separator for the short format shortFormatSeparator: "/" }, params); // traverse all nodes this.each(function () { var $this = $(this), $pluginElementsWrapper, $characterCounterSpan, $charactersRemainingSpan; // return if the given element is not a textfield or textarea if (!$this.is("input[type=text]") && !$this.is("textarea")) { return this; } // create main parent div if (params.characterCounterNeeded || params.charactersRemainingNeeded) { // create the character counter element wrapper $pluginElementsWrapper = $('<div>', { 'class': 'character-counter-main-wrapper' }); if (params.positionBefore) { $pluginElementsWrapper.insertBefore($this); } else { $pluginElementsWrapper.insertAfter($this); } } if (params.characterCounterNeeded) { $characterCounterSpan = $('<span>', { 'class': 'counter character-counter', 'text': 0 }); if (params.shortFormat) { $characterCounterSpan.appendTo($pluginElementsWrapper); var $shortFormatSeparatorSpan = $('<span>', { 'html': params.shortFormatSeparator }).appendTo($pluginElementsWrapper); } else { // create the character counter element wrapper var $characterCounterWrapper = $('<div>', { 'class': 'character-counter-wrapper', 'html': params.charactersTypedSuffix }); $characterCounterWrapper.prepend($characterCounterSpan); $characterCounterWrapper.appendTo($pluginElementsWrapper); } } if (params.charactersRemainingNeeded) { $charactersRemainingSpan = $('<span>', { 'class': 'counter characters-remaining', 'text': params.maximumCharacters }); if (params.shortFormat) { $charactersRemainingSpan.appendTo($pluginElementsWrapper); } else { // create the character counter element wrapper var $charactersRemainingWrapper = $('<div>', { 'class': 'characters-remaining-wrapper', 'html': params.charactersRemainingSuffixText }); $charactersRemainingWrapper.prepend($charactersRemainingSpan); $charactersRemainingWrapper.appendTo($pluginElementsWrapper); } } $this.keyup(function () { var typedText = $this.val(); var textLength = typedText.length; var charactersRemaining = params.maximumCharacters - textLength; // chop the text to the desired length if (charactersRemaining < 0 && params.chopText) { $this.val(typedText.substr(0, params.maximumCharacters)); charactersRemaining = 0; textLength = params.maximumCharacters; } if (params.characterCounterNeeded) { $characterCounterSpan.text(textLength); } if (params.charactersRemainingNeeded) { $charactersRemainingSpan.text(charactersRemaining); if (charactersRemaining <= 0) { if (!$charactersRemainingSpan.hasClass(params.limitExceededClass)) { $charactersRemainingSpan.addClass(params.limitExceededClass); } } else { $charactersRemainingSpan.removeClass(params.limitExceededClass); } } }); }); // allow jQuery chaining return this; }; })(jQuery); 
 $.fn.extend( { limiter: function(limit, elem) { $(this).on("keyup focus", function() { setCount(this, elem); }); function setCount(src, elem) { var chars = src.value.length; if (chars > limit) { src.value = src.value.substr(0, limit); chars = limit; } elem.html( limit - chars ); } setCount($(this)[0], elem); } }); var elem = $("#cntr"); $("#status_txt").limiter(160, elem); 

你的代码有点混乱。 这里是一个干净的版本:

 <script type="text/javascript"> $(document).ready(function() { $("#add").click(function() { $.post("SetAndGet.php", { know: $("#know").val() }, function(data) { $("#know_list").html(data); }); }); function countChar(val) { var len = val.value.length; if (len >= 500) { val.value = val.value.substring(0, 500); } else { $('#charNum').text(500 - len); } } }); </script> 

试试这个。

 <textarea maxlength="410" name="about_me" onkeydown="CountLeft(this.form.about_me, this.form.left);" onkeyup="CountLeft(this.form.about_me,this.form.left); "></textarea> <input maxlength="3" name="left" readonly="" size="3" type="text" value="410" /> characters left <script> function CountLeft(field, count) { var max = "410"; if (field.value.length > max) { field.value = field.value.substring(0, max); } else { count.value = max - field.value.length; } } </script> 

一个更通用的版本,所以你可以使用多个领域的function。

 <script src="../site/jquery/jquery.min.js" ></script> <script type="text/javascript"> function countChar(inobj, maxl, outobj) { var len = inobj.value.length; var msg = ' chr left'; if (len >= maxl) { inobj.value = inobj.value.substring(0, maxl); $(outobj).text(0 + msg); } else { $(outobj).text(maxl - len + msg); } } $(document).ready(function(){ //set up summary field character count countChar($('#summary').get(0),500, '#summarychrs'); //show inital value on page load $('#summary').keyup(function() { countChar(this, 500, '#summarychrs'); //set up on keyup event function }); }); </script> <textarea name="summary" id="summary" cols="60" rows="3" ><?php echo $summary ?></textarea> <span id="summarychrs">0</span> 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script> function countChar(val) { var limit = 1024; if ( val.length > limit ) { $("#comment").val(val.substring(0, limit-1)); val.length = limit; } $("#count").html((limit)-(val.length)); } </script> <textarea id="comment" onKeyUp="countChar(this.value)" required></textarea> <div id="count"></div> 

使用以下内容跳过使用else,并跳过负数。

这里我的例子。 简单的晚餐

 $(document).ready(function() { var textarea = $("#my_textarea"); textarea.keydown(function(event) { var numbOfchars = textarea.val(); var len = numbOfchars.length; $(".chars-counter").text(len); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <textarea id="my_textarea" class="uk-textarea" rows="5" name="text"></textarea> <h1 class="chars-counter">0</h1> 
 $('#field').keyup(function () { var max = 160; var len = $(this).val().length; // var char = max - len; var messages = Math.ceil(len / 160); if (len >= max) { $('#charNum').text('(' + messages + ') ' + len + '/' + max); } else { $('#charNum').text(len + '/' + max); } }); 

你可以使用:

  $(document).ready(function () { $('#ID').keyup(function () { var val = $(this).val(); len = val.length; if (len >= 140) { $(this).text(val.substring(0, 140)); } else { console.log(140 - len); $('#charNum').empty().append(140 - len); } }); });