20

我设法制作了这个小 jquery 函数来计算在 textarea 字段中输入的单词数。

这是小提琴

这是代码:

查询:

$(document).ready(function()
{
var wordCounts = {};
$("#word_count").keyup(function() {
    var matches = this.value.match(/\b/g);
    wordCounts[this.id] = matches ? matches.length / 2 : 0;
    var finalCount = 0;
    $.each(wordCounts, function(k, v) {
        finalCount += v;
    });
    $('#display_count').html(finalCount);
    am_cal(finalCount);
}).keyup();
}); 

这是html代码

<textarea name="txtScript" id="word_count" cols="1" rows="1"></textarea>
Total word Count : <span id="display_count">0</span> words.

我如何对其进行修改以获得这样的输出

总字数:0字。剩余字数:200

当它达到 200 个单词时,它不允许在 jquery 的 textarea 字段中粘贴或键入更多单词?即它应限制用户准确键入不超过 200 个字。

请帮忙。

提前非常感谢。

编辑:仅在此代码中需要修改,因为我非常了解插件,但它们可能会干扰主代码。

4

6 回答 6

47

使用return false停止keyup事件不会阻止事件,因为在这种情况下,事件已经触发。在执行该键的默认操作,当用户释放某个键时触发该keyup事件。

您将需要以编程方式编辑textarea您拥有的值#wordcount

$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = 0;

    if ((this.value.match(/\S+/g)) != null) {
      words = this.value.match(/\S+/g).length;
    }

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});

http://jsfiddle.net/k8y50bgd/

于 2013-07-28T15:45:18.227 回答
4

我会这样做吗?

$("#word_count").on('keydown', function(e) {
    var words = $.trim(this.value).length ? this.value.match(/\S+/g).length : 0;
    if (words <= 200) {
        $('#display_count').text(words);
        $('#word_left').text(200-words)
    }else{
        if (e.which !== 8) e.preventDefault();
    }
});

小提琴

于 2013-07-28T15:27:51.350 回答
2

一个简单的插件可以在这里找到:

使用 jQuery 的简单文本区域字数计数器

于 2013-07-28T15:13:34.773 回答
1

添加一个简单的if condition将解决您的问题。

$.each(wordCounts, function(k, v) {
    if(finalCount <= 200) {
        //Todos
    }
    else {
      return false;  //prevent keyup event
    }
 });
于 2013-07-28T15:21:03.700 回答
0

您可以使用正向前瞻正则表达式来保留空格 - 这样返回码和制表符就不会折叠到单个空格中。像这样的东西:

  var wordLimit = 5;
  var words = 0;
  var jqContainer = $(".my-container");
  var jqElt = $(".my-textarea");

function charLimit()
{
  var words = 0;
  var wordmatch = jqElt.val().match(/[^\s]+\s+/g);
  words = wordmatch?wordmatch.length:0;

  if (words > wordLimit) {
      var trimmed = jqElt.val().split(/(?=[^\s]\s+)/, wordLimit).join("");
      var lastChar = jqElt.val()[trimmed.length];
      jqElt.val(trimmed + lastChar);
  }
  $('.word-count', jqContainer).text(words);
  $('.words-left', jqContainer).text(Math.max(wordLimit-words, 0));
 }
 
 jqElt.on("keyup", charLimit);
 charLimit();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="my-container">
  <textarea class="my-textarea"></textarea>
  <span class="words-left"></span> words left
<div>

于 2017-11-06T11:58:53.127 回答
0

$(document).ready(function(){ $("textarea").on('keyup',function(){

                var value = $('textarea').val();
                var wordCount = 0;

                if(value == ""){
                    $('textarea').empty();
                }
                else{

                    var regex = /\s+/gi;
                    var wordCount = value.trim().replace(regex, ' ').split(' ').length;
                }

                    if(wordCount > 25){
                     var trimmed = $(this).val().split(/\s+/,25).join(" ");
                    $(this).val(trimmed + " ");
            }
            else{
                $('#display_count').html(25- wordCount +" words left");
            }


              });

});

于 2017-02-25T06:00:27.933 回答