JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://knockoutjs.com/downloads/knockout-3.0.0.js"></script>
<textarea data-bind="value: comment, valueUpdate: 'afterkeydown', limitCharacters: 20"></textarea>
<br/>
<br/>
<span data-bind="text: count"></span> characters
JavaScript
ko.bindingHandlers.limitCharacters = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var allowedNumberOfCharacters = valueAccessor();
var currentValue = allBindingsAccessor.get('value');
var cutText = ko.unwrap(currentValue).substr(0, allowedNumberOfCharacters);
currentValue(cutText);
}
};
var viewModel = {
comment: ko.observable(""),
};
viewModel.count = ko.computed(function () {
var countNum = 20 - viewModel.comment().length;
return countNum;
});
ko.applyBindings(viewModel);