javascript - 如何使用 addEventListener 进行输入验证?
问题描述
我正在做一个项目来练习 javascript 和 HTML 中的表单验证,我似乎无法让 addEventListener 工作。我需要 3 个来检查单击提交按钮时是否填写了所有必需的表格,一个来检查他们输入手机的输入是否正确,另一个来检查是否选择了一个单选按钮选项。我知道函数可以工作,我只是无法触发 addEventListener。以下是事件:
document.getElementById("_submit").addEventListener("click", submit(),useCapture);
document.getElementById("phone").addEventListener("input", checkInputPhone(), useCapture);
document.getElementByName("type").addEventListener("submit", checkType(), useCapture);
这里是 HTML:
<label>Phone Number: Please enter in this format-(XXX-XXX-XXXX)*required</label>
<input type="tel" id="phone" name="phone" required pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}">
<p id = "_phone" name = "errorMessage"></p>
<div id="credit_type">
<h3>Credit Card type:</h3>
<input type="radio" id="visa" name="type" value="visa">
<label for="visa">Visa</label>
<input type="radio" id="master" name="type" value="master">
<label for="master">Mastercard</label>
<input type="radio" id="american" name="type" value="american">
<label for="american">American Express</label>
<p id = "_type"></p>
</div>
<button type="submit" id = "_submit">Validator</button>
<button type="buttom" onclick = "reset()">Reset</button>
<p id="sub" name = "errorMessage"></p>
以下是功能:
function submit(){
getAddress();
getName();
getCreditInfo();
document.getElementById("total").innerHTML = total;
}
function checkInputPhone(){
var input = document.getElementById("phone").value;
if(!input.checkValidity()){
document.getElementById("_phone").innerHTML = "Not a valid input";
}
}
function checkType(){
var input = document.getElementByName("type").value;
if (input == ""){
document.getElementById("_type").innerHTML = "A type selection is required.";
}
}
解决方案
这样做的方法:
const myForm = document.forms['my-form'] // global constant for everything about the form
;
myForm.phone.oninvalid=_=> // invalid event listener on name="phone" of myForm
{
myForm.phone.setCustomValidity('Not a valid input')
}
myForm.type.oninvalid=_=> // invalid event listener on name="type"
{
myForm.type.setCustomValidity('A type selection is required.')
}
myForm.onsubmit=evt=> // submit event listener is on form élément, not on the button
{
evt.preventDefault() // disable form submiting (for testing here)
// show values:
console.clear()
console.log('phone = ', myForm.phone.value ) // <-- use element form name
console.log('type = ', myForm.type.value )
}
<form name="my-form" >
<label>Phone Number: </label>
<input type="tel" name="phone" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}" placeholder="XXX-XXX-XXXX" required>
<fieldset>
<legend>Credit Card type:</legend>
<label> <input type="radio" name="type" value="visa" required > Visa </label>
<label> <input type="radio" name="type" value="master" > Mastercard </label>
<label> <input type="radio" name="type" value="american"> American Express </label>
</fieldset>
<button type="submit"> Validator </button>
<button type="reset" > Reset </button>
</form>
推荐阅读
- javascript - 停止自动转换时区
- python - Python 2 和 3 中 unicode/str 参数的正确文档字符串是什么
- javascript - 如何在一页上有多个时钟?
- java - 如何从另一个 Web 应用程序在远程计算机上执行 bat 文件
- java - 在一个字符串中找到 NUMBERS 的总和?
- scala - 仅稳定对象成员支持移动重构
- excel - 将条件添加到 p:dataExporter 的目标属性中,以便一次导出两个不同选项卡中的两个数据表,以便在 primefaces 中表现出色
- python - 在 Python 上的 Azure 人脸 API 中进行人脸验证的错误代码请求
- php - 函数调用期间的PHP全局变量错误
- database - 一起使用 Redis 和 MongoDB,最好将每个会话存储在 Redis 中并在会话结束时更新数据库?