JSFiddle - React, Tailwind, and code Playground

by manoj

HTML

<script src="http://knockoutjs.com/downloads/knockout-3.1.0.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>
<input data-bind="formatMoney: testVal">
    <input data-bind="formatMoney: testVal2">
        <input data-bind="formatMoney: total">

CSS

input {
    padding: 8px;
    font-size: 14px;
}

JavaScript

//test 2
$(document).on("focus", "input:text", null, function (ev) {
        $(this).select(); 
        return this;
    });
     
    $(document).on("mouseup", "input:text", null, function (e) {
        e.preventDefault(); 
    });

ko.bindingHandlers.formatMoney = {
	init: function(element, valueAccessor) {
        ko.utils.registerEventHandler(element, 'change', function (event) { alert($(element).val());
            valueAccessor($(element).val());
        });
		var value = valueAccessor();
		var interceptor = ko.computed({
			read: function() {
               if(ko.unwrap(value) === undefined )
               {
                     value("0");
               }
                return numeral(ko.unwrap(value)).format('0,0.00');
			},
			write: function(newValue) {
                
                if($.trim(newValue) == '')
                    value("0");
                else
                    value(numeral().unformat(newValue));
                value.valueHasMutated();
			}
		}) .extend({notify: "always", throttle: 100})
    .extend({notify: "always"})
        
		if(element.tagName.toLowerCase() == 'input' )
			ko.applyBindingsToNode(element, {
                value: interceptor
			});
		else
			ko.applyBindingsToNode(element, {
				text: interceptor
			});
	}
}

function viewModel () {
    var self = this;
     self.testVal = ko.observable();
       self.testVal2 = ko.observable();
    self.total = ko.computed(function () {
        console.log(self.testVal())
         console.log(self.testVal2())
        
   return  parseFloat(self.testVal()) + parseFloat(self.testVal2());
    });
}

ko.applyBindings(new viewModel());