Textarea में वर्णों की गणना करें


120

मैं एक 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);
     }
};

कोड के मेरे टुकड़े के साथ गलत क्या है? यह काम नहीं करता! खैर, यह एक नौसिखिया लिखावट थी, मदद की ज़रूरत है।


भविष्य में, कृपया अपना प्रश्न संपादित करें या अतिरिक्त जानकारी या स्पष्टीकरण जोड़ने के लिए जवाब के तहत टिप्पणी सुविधा का उपयोग करें। उत्तर ऐसे पोस्ट होने चाहिए जो सीधे आपकी समस्या का समाधान करें। यदि आप अपनी समस्या का समाधान पोस्ट करते हैं, तो अपने समाधान को सही उत्तर के रूप में स्वीकार करें। जैसा कि आप दूसरे को स्वीकार कर चुके हैं, मैंने आपके बहुत से 'उत्तर' निकाले हैं।
टिम पोस्ट

जवाबों:


169

ब्राउज़र में आप क्या त्रुटियाँ देख रहे हैं? मैं समझ सकता हूं कि यदि आपने जो पोस्ट किया था, तो आपका कोड काम क्यों नहीं करता है, लेकिन यह जानने के बिना कि मुझे यकीन नहीं है।

<!DOCTYPE html>
<html>
  <head>
    <script src="http://code.jquery.com/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>

... मेरे लिए ठीक काम करता है।

संपादित करें: आपको शायद चार्नाम डिव को साफ़ करना चाहिए या कुछ लिखना चाहिए, अगर वे सीमा से अधिक हैं।


1
वास्तव में? मेरे पास id = 'charNum' के लिए div के बजाय सिर्फ एक स्पैन है, मुझे फिर से देखने दो!
काइल

अपना पूरा कोड देखने के बाद, आप इससे अलग तरीके से क्या करने की उम्मीद कर रहे थे? इसके बारे में "टूटी" क्या है?
कैटरम

आप "और" को हटा सकते हैं, सिर्फ इसलिए कि हम 500 को हिट करते हैं, इसका मतलब यह नहीं है कि हमें मूल्य को प्रदर्शित करने के लिए #charNum को रोकना चाहिए, "और" नंबर 0 के बजाय 1 पर रोक देगा क्योंकि यह अभी है।
जोकिम

@ जोकिम, मैंने बाकी को हटा दिया लेकिन, इस मामले में, मुझे ऋणात्मक अंक मिलेंगे!
काइल

हो सकता है कि अगर आप "आप सीमा तक पहुँच चुके हैं", या ऐसा ही कुछ कहने के लिए, अगर, कुछ जोड़ें।
कैटरम

83

कैटरम के कार्य पर आधारित बेहतर संस्करण :

$('#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');
  }
});

1
यह प्रयोग न करें। यह समाधान एटिने मार्टिन द्वारा बताया गया है।
फेबियन बिगलर

79

Is स्वीकृत समाधान त्रुटिपूर्ण है।

यहां दो परिदृश्य हैं जहां keyupघटना निकाल नहीं दी जाएगी:

  1. उपयोगकर्ता टैक्स्टारिया में टेक्स्ट ड्रग करता है।
  2. टेक्स्टारिआ में उपयोगकर्ता कॉपी-पेस्ट पाठ को राइट क्लिक (संदर्भ मेनू) के साथ करता है।

inputअधिक मजबूत समाधान के लिए HTML5 ईवेंट का उपयोग करें :

<textarea maxlength='140'></textarea>

जावास्क्रिप्ट ( डेमो ):

const textarea = document.querySelector("textarea");

textarea.addEventListener("input", event => {
    const target = event.currentTarget;
    const maxLength = target.getAttribute("maxlength");
    const currentLength = target.value.length;

    if (currentLength >= maxLength) {
        return console.log("You have reached the maximum number of characters.");
    }

    console.log(`${maxLength - currentLength} chars left`);
});

और अगर आप पूरी तरह से jQuery का उपयोग करना चाहते हैं:

$('textarea').on("input", function(){
    var maxlength = $(this).attr("maxlength");
    var currentLength = $(this).val().length;

    if( currentLength >= maxlength ){
        console.log("You have reached the maximum number of characters.");
    }else{
        console.log(maxlength - currentLength + " chars left");
    }
});

4
inputघटना की जानकारी नहीं थी। धन्यवाद
ABK

एक त्वरित प्रश्न (आपके कोड / विधि का अभी तक प्रयास नहीं किया गया है) क्या यह ध्वनि इनपुट के लिए काम करेगा?
सेफर

1
@ पूरी तरह से देखें।
एटिएन मार्टिन 12

मैं यह कोशिश करूंगा। मुझे काम में एक छोटे से प्रोजेक्ट के लिए कुछ इस तरह की जरूरत थी।
Syfer

उपरोक्त कोड ने iOS में काम नहीं किया जब आवाज का उपयोग JS और jQuery दोनों के लिए किया जाता है। कोई विचार?
सेफर

9

HTML नमूना, जहाँ भी मुझे एक काउंटर की आवश्यकता होती है, textarea की आईडी की प्रासंगिकता पर ध्यान दें और दूसरी अवधि: id="post"<-> id="rem_post"और उस अवधि का शीर्षक जो प्रत्येक विशेष textarea की वांछित वर्ण राशि रखता है।

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

जावास्क्रिप्ट फ़ंक्शन, आमतौर पर </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);

});

9

यह मेरे लिए ठीक रहा।

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

7

substring()बनने की जरूरत है substr()

उदाहरण: jsfiddle.net/xqyWV


@MattCurtis: आपको अपने jsFiddle-Demo को मूल पोस्ट में पोस्ट करना चाहिए (अधिक अपवोट प्राप्त करने के लिए) और इसे और अधिक मार्क करने योग्य बनाने के लिए। मैंने आपके पोस्ट को संपादित करने और लिंक पेस्ट करने की कोशिश की, लेकिन मेरा संपादन अस्वीकार कर दिया गया।
Sk8erPeter

क्या आप कृपया पूर्ण नमूना पोस्ट कर सकते हैं .. इसमें आपके द्वारा उपयोग किए जाने वाले jquery संस्करण शामिल हैं। ऊपर का नमूना बेकार है। माफ़ करना!।
deepcell

@ B4NZ41 मेरे लिए ठीक काम करता है। इसके लिए अन्य उत्तर भी हैं जो इसे बेहतर तरीके से संबोधित करते हैं।
Mattsven

4

खैर, यह नहीं है कि जो कहा गया है उससे अलग है, लेकिन यह सभी ब्राउज़रों में बहुत अच्छी तरह से काम करता है।

विचार किसी भी पाठ को हटाने के लिए है जो परिभाषित लंबाई से अधिक है।

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>

4

एचटीएमएल

<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);
    });
});

3

मैंने उपरोक्त का एक संयोजन किया। यह पाठ प्रविष्टि के ठहराव के लिए अनुमति देता है, और बैकस्पेसिंग के लिए अनुमति देता है, साथ ही बैकस्पेसिंग के दौरान भी, गिनती रखता है:

जावास्क्रिप्ट कोड:

$(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>

मेरे सामने उन पोस्टरों को श्रेय !! आशा है कि यह किसी की मदद करता है!


3

मैंने इस कार्य के लिए अपना स्वयं का jQuery प्लगइन बनाया है, आप इसे यहाँ आज़मा सकते हैं:

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

आप कैरेक्टर काउंटर को फ्लाई पर बना सकते हैं (और कैरेक्टर काउंटर को भी शेष कर सकते हैं), आप परिभाषित कर सकते हैं कि क्या आप टेक्स्ट को काटना चाहते हैं, आप प्रत्यय ग्रंथों को परिभाषित कर सकते हैं और आप एक छोटे प्रारूप और इसके विभाजक को भी परिभाषित कर सकते हैं।

यहां एक उदाहरण का उपयोग किया गया है:

$(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 (e.g. 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);

यह प्रारंभिक लोड पर काउंटरों को अद्यतन नहीं करता है अगर पहले से ही तत्वों में पाठ है। एक तुच्छ तय हालांकि।
रवेन्दर्स्की

2
$.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);

2

मैं सोच रहा था कि यह वही काम कैसे करे और यहाँ सभी से विचार ले रहा है कि मैं क्या कर रहा हूँ:

JsFiddle

<textarea name="message" rows="4" cols="24" maxlength="1000" id="message" placeholder="Message:" style=""></textarea><br/>
<span id="charNum"></span>

$('#message').keyup(function () {
  max = this.getAttribute("maxlength");
  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');
   }
});

1
$(document).ready(function() {
    var count = $("h1").text().length;
    alert(count);
});

इसके अलावा, आप "h1" के बजाय अपनी खुद की एलिमेंट आईडी या क्लास लगा सकते हैं और लंबाई घटना टेक्स्ट एरिया स्ट्रिंग can के अपने कैरेक्टर को गिन सकते हैं


0

आपका कोड थोड़ा मिला हुआ था। यहाँ एक साफ संस्करण है:

<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>

धूर्त, मेरा विश्वास करो, यह काम नहीं करता है, ऐसा लगता है कि फ़ंक्शन के साथ शुरू होता है .. फ़ंक्शन () {.. $ $ (दस्तावेज़) से बाहर होने की आवश्यकता है। पहले से ही (फ़ंक्शन () {
काइल

0

इसको आजमाओ।

<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>

0

एक अधिक सामान्य संस्करण ताकि आप एक से अधिक फ़ील्ड के लिए फ़ंक्शन का उपयोग कर सकें।

<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>

0
<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>

निम्नलिखित का उपयोग करके दूसरे का उपयोग करना छोड़ें और नकारात्मक गणना प्राप्त करना भी छोड़ दें।


0

यहाँ मेरा उदाहरण है। सपर सपर

$(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>


0

हम किसी भी निर्धारित समाधान से खुश नहीं थे।

इसलिए हमने JQuery के लिए एक पूर्ण चार काउंटर समाधान बनाया है, जो jquery-jeditable के शीर्ष पर बनाया गया है । यह एक textareaप्लगइन एक्सटेंशन है जो दोनों तरीकों से गणना कर सकता है, एक कस्टम संदेश प्रदर्शित करता है, चार गिनती को सीमित करता है और jquery-datatables का भी समर्थन करता है

आप इसे तुरंत JSFiddle पर परीक्षण कर सकते हैं

GitHub लिंक: https://github.com/HippotecLTD/realworld_jquery_jeditable_charcount

जल्दी शुरू

इन पंक्तियों को अपने HTML में जोड़ें:

<script async src="https://cdn.jsdelivr.net/gh/HippotecLTD/realworld_jquery_jeditable_charcount@1.0.0/dist/jquery.jeditable.charcounter.realworld.min.js"></script>
<script async src="https://cdn.jsdelivr.net/gh/HippotecLTD/realworld_jquery_jeditable_charcount@1.0.0/dist/jquery.charcounter.realworld.min.js"></script>

और तब:

$("#myTextArea4").charCounter();

-1
$('#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);
    }
    });

-1

यू का उपयोग कर सकते हैं:

    $(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);
   }
  });
 });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.