I found a code which allows me to re format the phone number in a form. It works great, I have to give the form input id for it recognize which field the script will be checking but the problem is every time i update the form the input id changes and I Cannot change the input id and make it static.
I was wondering if I could use the placeholder or data-label-inside or name instead of the ID.
Here is the snippet of the code which does refers to the input ID (the full formatting code is below)
const inputElement = document.getElementById('1d72b826f2fca893b7198aa3f208265f-3');
inputElement.addEventListener('keydown',enforceFormat);
inputElement.addEventListener('keyup',formatToPhone);
The form code looks like this
<input id="1d72b826f2fca893b7198aa3f208265f-3" name="UGhvbmUgTnVtYmVy" value="" placeholder="Phone Number" data-label-inside="Phone Number" class="shortnice form-input required shadow-inside checknumericvalue validatePhone" type="text">
Below is the whole code just in-case:
ijQuery(document).ready(function () {
const isNumericInput = (event) => {
const key = event.keyCode;
var test = event.target.value.replace(/\D/g,'').substring(0,1);
if(test.length <= 0){
return ((key >= 50 && key <= 57) || // Allow number line
(key >= 98 && key <= 105) // Allow number pad
);
}else{
return ((key >= 48 && key <= 57) || // Allow number line
(key >= 96 && key <= 105) // Allow number pad
);
}
};
const isModifierKey = (event) => {
const key = event.keyCode;
return (event.shiftKey === true || key === 35 || key === 36) || // Allow Shift, Home, End
(key === 8 || key === 9 || key === 13 || key === 46) || // Allow Backspace, Tab, Enter, Delete
(key > 36 && key < 41) || // Allow left, up, right, down
(
// Allow Ctrl/Command + A,C,V,X,Z
(event.ctrlKey === true || event.metaKey === true) &&
(key === 65 || key === 67 || key === 86 || key === 88 || key === 90)
)
};
const enforceFormat = (event) => {
// Input must be of a valid number format or a modifier key, and not longer than ten digits
if(!isNumericInput(event) && !isModifierKey(event)){
event.preventDefault();
}
};
const formatToPhone = (event) => {
if(isModifierKey(event)) {return;}
// I am lazy and don't like to type things more than once
const target = event.target;
const input = event.target.value.replace(/\D/g,'').substring(0,10); // First ten digits of input only
const zip = input.substring(0,3);
const middle = input.substring(3,6);
const last = input.substring(6,10);
if(input.length > 6){target.value = `${zip}${middle}${last}`;}
else if(input.length > 3){target.value = `${zip}${middle}`;}
else if(input.length > 0){target.value = `${zip}`;}
};
const inputElement = document.getElementById('1d72b826f2fca893b7198aa3f208265f-3');
inputElement.addEventListener('keydown',enforceFormat);
inputElement.addEventListener('keyup',formatToPhone);
var fieldLabel = 'Phone Number';
ijQuery.validator.addMethod('validatePhone', function (value, element) {
if (value.length>=10) {
return true;
} else {
return false;
}
});
ijQuery('form [name="' + base64_encode(fieldLabel) + '"]').addClass('validatePhone');
ijQuery.extend(ijQuery.validator.messages, {
validatePhone: 'is invalid.'
});
});