JSFiddle - React, Tailwind, and code Playground
by darkajax
HTML
<html>
<head>
<title>Textarea Characters, Words Counter and Characters Limitation</title>
</head>
<body>
<h2>Message1</h2>
<textarea id="testTextarea" cols="50" rows="10"></textarea>
<div id="showData1"></div>
<h2>Message2</h2>
<textarea id="testTextarea2" cols="50" rows="10"></textarea>
<div id="showData2"></div>
<h2>Message3</h2>
<textarea id="testTextarea3" cols="50" rows="10"></textarea>
<div id="showData3"></div>
<div id="overallpoints">Overall points: <div id="showData4"></div></div>
</body>
</html>
CSS
body {
font-size: 12px;
font-family: Arial, Helvetica, sans-serif;
line-height: 20px;
color: #333333;
}
h2 {
font-weight:bold;
font-size:20px;
margin:10px 0;
}
#overallpoints {
position:fixed;
top:0px;
right:20px;
}
a {
color: #333333;
text-decoration: none;
}
.overview {
background: #FFEC9D;
padding: 10px;
width: 90%;
border: 1px solid #CCCCCC;
}
.originalTextareaInfo {
font-size: 12px;
color: #000000;
font-family: Tahoma, sans-serif;
text-align: right
}
.warningTextareaInfo {
font-size: 12px;
color: #FF0000;
font-family: Tahoma, sans-serif;
text-align: right
}
#showData {
height: 70px;
width: 200px;
border: 1px solid #CCCCCC;
padding: 10px;
margin: 10px;
}
JavaScript
(function($){
$.fn.textareaCount = function(options, fn) {
var defaults = {
maxCharacterSize: -1,
originalStyle: 'originalTextareaInfo',
warningStyle: 'warningTextareaInfo',
warningNumber: 20,
displayFormat: '#input characters | #words words'
};
var options = $.extend(defaults, options);
var container = $(this);
$("<div class='charleft'> </div>").insertAfter(container);
//create charleft css
var charLeftCss = {
'width' : container.width()
};
var charLeftInfo = getNextCharLeftInformation(container);
charLeftInfo.addClass(options.originalStyle);
charLeftInfo.css(charLeftCss);
var numInput = 0;
var maxCharacters = options.maxCharacterSize;
var numLeft = 0;
var numWords = 0;
container.bind('keyup', function(event){limitTextAreaByCharacterCount();})
.bind('mouseover', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);})
.bind('paste', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);});
function limitTextAreaByCharacterCount(){
charLeftInfo.html(countByCharacters());
//function call back
if(typeof fn != 'undefined'){
fn.call(this, getInfo());
}
return true;
}
function countByCharacters(){
var content = container.val();
var contentLength = content.length;
//Start Cut
if(options.maxCharacterSize > 0){
//If copied content is already more than maxCharacterSize, chop it to maxCharacterSize.
if(contentLength >= options.maxCharacterSize) {
content = content.substring(0,...