website creator
// credit to http://stackoverflow.com/questions/21374605/java-script-to-allow-only-numbers-comma-dot-back-space
function _validateFloatNumber(element, evt) {
var event, key, numberSplitByDot,
caretPos, dotPos, regex, notValid = false;
event = evt || window.event;
key = event.keyCode || event.which;
key = String.fromCharCode(key);
if (key.length == 0) { // do nothing if it is non-char button
return;
}
if (event.charCode == 0) { // in Firefox key will be not empty but charCode will be 0 for non-char buttons
return;
}
regex = /^[0-9.\b]+$/; // allow only numbers and decimal dot
if (!regex.test(key)) {
notValid = true;
}
numberSplitByDot = element.value.split('.');
if (numberSplitByDot.length > 1 && key == '.') { // only 1 dot
notValid = true;
}
caretPos = _getCursorPosition(element);
dotPos = element.value.indexOf('.');
if (caretPos > dotPos && numberSplitByDot[1] && numberSplitByDot[1].length > 1) { // only 2 digits after dot
notValid = true;
}
if (notValid) {
event.returnValue = false;
if (event.preventDefault) {
event.preventDefault();
}
}
}
// credit to http://stackoverflow.com/questions/2897155/get-cursor-position-in-characters-within-a-text-input-field
function _getCursorPosition(element) {
var caretPos = 0;
if ('selectionStart' in element) { // modern browsers
caretPos = element.selectionStart;
} else if (document.selection) { // IE
element.focus();
var sel = document.selection.createRange(); // to get cursor position, get empty selection range
var selLen = document.selection.createRange().text.length;
sel.moveStart('character', -element.value.length); // move selection start to 0 position
caretPos = sel.text.length - selLen; // the caret position is selection length
}
return caretPos;
}
jQuery(function($){ // document.ready and noConflict mode
$('.target').on('keypress', function (event) {
return _validateFloatNumber(this, event);
});
});