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(""),
    count : ko.computed(function(){
        var countNum = 20 - viewModel.comment().length;
        return countNum;
    }, null,  {deferEvaluation: true})
};
ko.applyBindings(viewModel);