JSFiddle - React, Tailwind, and code Playground

by jschevling

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<input data-bind="textInput:textPercent" />
<div data-bind="text:multPercent"></div>
<input data-bind="textInput:textNumber" />
<div data-bind="text:multNumber"></div>

JavaScript

function dataBindings() {
    var self = this;
    
    self.percent = function(str){
        var splice = str.toString().replace('%','');
        splice = splice + '%';
        return splice;
    };
    
    self.number = function(numStr){
		var formatted;
		if (Number(numStr) % 1) {
			var integer = numStr.toString().replace(/\.\d+/g,'');
			var decimal = numStr.toString().replace(/\d+\./g,'');
			integer = integer.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); //add comma formatting
			formatted = integer + '.' + decimal;
            console.log('formatted = '+formatted);
			return formatted;
		} else {
			formatted = numStr.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
			return formatted;
		}		
	};
    
    self.displayPercent = ko.observable('5%');
    self.rawPercent = ko.observable(5);
    self.formattedPercent = ko.computed({
        read: function() {
             return self.displayPercent();   
        },
        write: function(newValue) {
            if (newValue==='') {
                newValue = 0;
                self.rawPercent(0);
                var f = self.percent(newValue);
                self.displayPercent(f);
            } else {
                if (newValue.charAt(0)==='0') {
                    newValue = newValue.slice(1);
                }
                self.rawPercent(parseFloat(newValue.toString().replace('%','')));
                var f = self.percent(newValue);
                self.displayPercent(f);
            }
        }
    });
    
    self.displayNumber = ko.observable('3,000');
    self.rawNumber = ko.observable(3000);
    self.formattedNumber = ko.computed({
        read: function(){
            return self.displayNumber();
        },
        write: function(newValue) {
            if (newValue==='') {
                newValue = 0;
                self.rawNumber(0);
                self.displayNumber('0');
            } else {
                if (newValue.charAt(0)==='0') {
                   newValue =...