我的javascript事件侦听器没有';不起作用,它仍然提交页面

我的javascript事件侦听器没有';不起作用,它仍然提交页面,javascript,html,css,addeventlistener,html5-formvalidation,Javascript,Html,Css,Addeventlistener,Html5 Formvalidation,我在JavaScript方面有点不在行。我正在尝试验证一个联系人表单,但是我的JavaScript都没有工作,但是我想我的事件侦听器是问题所在,因为我的页面仍然会在单击按钮时刷新。它在控制台中返回了一个错误Uncaught TypeError:无法读取null的属性'addEventListener',请帮助 const form=document.getElementById('form'); const client=document.getElementById('name'); con

我在JavaScript方面有点不在行。我正在尝试验证一个联系人表单,但是我的JavaScript都没有工作,但是我想我的事件侦听器是问题所在,因为我的页面仍然会在单击按钮时刷新。它在控制台中返回了一个错误Uncaught TypeError:无法读取null的属性'addEventListener',请帮助

const form=document.getElementById('form');
const client=document.getElementById('name');
const email=document.getElementById('email');
const message=document.getElementById('text-message');
//显示输入错误消息
功能错误(输入、消息){
const formControl=input.parentElement;
formControl.className='form control error';
constsmall=formControl.querySelector('small');
small.innerText=消息;
}
//展示成功概要
函数showSuccess(输入){
const formControl=input.parentElement;
formControl.className='form control success';
}
//检查电子邮件是否有效
功能检查电子邮件(输入){
常量re=/^([^()\[\]\\,;:\s@“]+(\.[^()\[\]\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.]124;([a-zA Z-0-9]++];
if(重新测试(input.value.trim()){
showSuccess(输入);
}否则{
淋浴ROR(输入“电子邮件无效”);
}
}
//检查必填字段
需要功能检查(inputArr){
inputArr.forEach(函数(输入){
if(input.value.trim()=''){
淋浴错误(输入,`${getFieldName(输入)}是必需的`);
}否则{
showSuccess(输入);
}
});
}
//获取字段名
函数getFieldName(输入){
返回input.id.charAt(0.toUpperCase()+input.id.slice(1);
}
//事件侦听器
表.addEventListener('submit',函数(e){
e、 预防默认值();
需要检查([客户、电子邮件、消息]);
检查电子邮件(电子邮件);
});
.container{
显示器:flex;
调整内容:灵活启动;
弯曲方向:立柱;
宽度:30雷姆;
填充:0rem 10rem;}
.容器.提交btn{
页边距顶部:4rem;}
.容器输入{
宽度:20雷姆;
高度:2em;
背景色:var(--蓝色);
边框:1px实心#0652b9;
边框颜色:#0652b9;
边界半径:2.5雷姆;
显示:块;
颜色:#161616;
文本缩进:15px;}
.容器输入:焦点{
大纲:0;
边框颜色:#ff8b2c;}
.集装箱文本区{
宽度:20雷姆;
高度:10雷姆;
背景色:var(--蓝色);
边框:1px实心#0652b9;
边框颜色:#0652b9;
边界半径:1.5雷姆;
颜色:#161616;
文本缩进:15px;}
.容器文本区域:焦点{
大纲:0;
边框颜色:#ff8b2c;}
.container::占位符{
颜色:#161616;
不透明度:0.5;}
.container.form控件{
位置:相对;}
.container.form-control.success输入{
边框颜色:绿色;}
.container.form-control.error输入{
边框颜色:红色;}
.container.form控件小{
颜色:红色;
底部:0;
左:0;
可见性:隐藏;}
.container.form-control.error-small{
可见性:可见;}
钮扣{
宽度:7雷姆;
高度:3雷姆;
背景#0652b9;
边框样式:无;
边界半径:2.5雷姆;
颜色:#ffffff;}

错误消息
错误消息
错误消息
发送消息

变量客户机的选择器应该是客户机而不是名称

const form=document.getElementById('form');
const client=document.getElementById('client');
const email=document.getElementById('email');
const message=document.getElementById('text-message');
//显示输入错误消息
功能错误(输入、消息){
const formControl=input.parentElement;
formControl.className='form control error';
constsmall=formControl.querySelector('small');
small.innerText=消息;
}
//展示成功概要
函数showSuccess(输入){
const formControl=input.parentElement;
formControl.className='form control success';
}
//检查电子邮件是否有效
功能检查电子邮件(输入){
常量re=/^([^()\[\]\\,;:\s@“]+(\.[^()\[\]\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.]124;([a-zA Z-0-9]++];
if(重新测试(input.value.trim()){
showSuccess(输入);
}否则{
淋浴ROR(输入“电子邮件无效”);
}
}
//检查必填字段
需要功能检查(inputArr){
inputArr.forEach(函数(输入){
if(input.value.trim()=''){
淋浴错误(输入,`${getFieldName(输入)}是必需的`);
}否则{
showSuccess(输入);
}
});
}
//获取字段名
函数getFieldName(输入){
返回input.id.charAt(0.toUpperCase()+input.id.slice(1);
}
//事件侦听器
表.addEventListener('submit',函数(e){
e、 预防默认值();
需要检查([客户、电子邮件、消息]);
检查电子邮件(电子邮件);
});
.container{
显示器:flex;
调整内容:灵活启动;
弯曲方向:立柱;
宽度:30雷姆;
填充:0rem 10rem;}
.容器.提交btn{
页边距顶部:4rem;}
.容器输入{
宽度:20雷姆;
高度:2em;
背景色:var(--蓝色);
边框:1px实心#0652b9;
边框颜色:#0652b9;
边界半径:2.5雷姆;
显示:块;
颜色:#161616;
文本缩进:15px;}
.容器输入:焦点{
大纲:0;
边框颜色:#ff8b2c;}
.集装箱文本区{
宽度:20雷姆;
高度:10雷姆;
背景色:var(--蓝色);
边框:1px实心#0652b9;
边框颜色:#0652b9;
边界半径:1.5雷姆;
颜色:#161616;
文本缩进:15px;}
.容器文本区域:焦点{
大纲:0;
边框颜色:#ff8b2c;}
.包含
const client = document.getElementById('name');
const client = document.getElementById('client');