//mz_form_script.js
// global variables
const USER_UPPER_NUM = 45;
const KC_BACKSPACE = 8;
const KC_END = 35;
const KC_HOME = 36;
const KC_ARROW_KEYS = [37, 38, 39, 40];
const KC_NUMPAD_DASH = [109, 173, 189];
var _kc_digits = []; {
// Digit0 to Digit9
for (var i = 48; i < 58; ++i) {
_kc_digits.push(i);
}
// Numpad0 to Numpad9
for (var i = 96; i < 106; ++i) {
_kc_digits.push(i);
}
}
const KC_DIGITS = _kc_digits;
$(document).ready(function() {
// insert num into para
var user_input_num_p = $("#doc_user_input_p");
user_input_num_p.text(USER_UPPER_NUM.toString());
// restrict user input
var user_input_num_t = $("#doc_cb_3_num_input_1");
user_input_num_t.attr({
placeholder: "1-" + Number(user_input_num_p.text()),
min: 1,
max: Number(user_input_num_p.text()),
});
user_input_num_t.keyup(handleDocCb3NumInput);
});
/**
* To handle doc cb 3 user input
*
* @param {input} event
*/
function handleDocCb3NumInput(event) {
const key_pressed = event.which;
var old_val = $(this).val();
console.log("key_pressed = " + key_pressed);
console.log("old_val = " + old_val);
// check for valid characters
// TODO: below regex does not work correctly with onkeyup
//(/^(\d{0,5}|\b(\d{0,5}-\d{0,5})\b)$/gm);
var regex_res = old_val.match(/^(\d{0,5}|(\d{0,5}-\d{0,5}))$/g);
if (null == regex_res) {
console.log("regex is invalid, key: " + key_pressed);
$(this).val(function(i, val) {
return val.slice(0, -1);
});
return;
} else {
console.log("regex matched: " + regex_res);
}
var key_char = "";
// valid ctrl keys
if (
KC_BACKSPACE == key_pressed ||
KC_HOME == key_pressed ||
KC_END == key_pressed ||
KC_ARROW_KEYS.includes(key_pressed)
) {
console.log("key_pressed is valid ctrl char");
} else if (KC_NUMPAD_DASH.includes(key_pressed)) {
key_char = "-";
console.log("key_pressed is valid char: " + key_char);
} else if (KC_DIGITS.includes(key_pressed)) {
let that = this
setTimeout(function(){
if (!parseAndValidateOldVal(regex_res)) {
console.log("text number value is invalid");
$(that).val(function(i, val) {
return val.slice(0, -1);
});
}
}, 1000);
}
// invalid keys
else {
console.log("invalid key: " + key_pressed);
$(this).val(function(i, val) {
return val.slice(0, -1);
});
}
}
function parseAndValidateOldVal(regex_res) {
var input_val = regex_res.toString();
// is invalid
if (input_val.startsWith("-") || input_val.endsWith("-")) {
return false;
}
var input_val_num = Number(input_val);
// is range and range is valid [1 < l < h < USER_UPPER_NUM]
if (isNaN(input_val_num)) {
var res = input_val.split("-", 2);
var low = Number(res[0]);
var high = Number(res[1]);
if (low >= high || low < 1 || high > USER_UPPER_NUM) return false;
}
// is single number and [1 < val < USER_UPPER_NUM]
else if (input_val_num < 1 || input_val_num > USER_UPPER_NUM) {
return false;
}
return true;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>MZ form</title>
</head>
<body>
<h1>Handle form input dynamically</h1>
<p>User input: <span id="doc_user_input_p" style="font-weight: bold;"></span></p>
<form id="doc_cb_3" method="get">
<input type="text" placeholder="1" id="doc_cb_3_num_input_1" name="doc_cb_3_num" />
<button name="send" type="submit" value="ok">ok</button>
</form>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="mz_form_script.js"></script>
</body>
</html>