Javascript 是什么导致无法读取属性';防止违约';此表单验证程序类中未定义的?
我正在使用JavaScript编写一个表单验证程序类:Javascript 是什么导致无法读取属性';防止违约';此表单验证程序类中未定义的?,javascript,es6-class,Javascript,Es6 Class,我正在使用JavaScript编写一个表单验证程序类: 类FormValidator{ 构造函数(){ this.formToValidate=document.querySelector(“表单”); this.submitButton=this.formToValidate.querySelector(“输入[type=submit]”); } validateForm(){ console.log('test'); } 提交表格(e){ e、 预防默认值(); 这是validateFor
类FormValidator{
构造函数(){
this.formToValidate=document.querySelector(“表单”);
this.submitButton=this.formToValidate.querySelector(“输入[type=submit]”);
}
validateForm(){
console.log('test');
}
提交表格(e){
e、 预防默认值();
这是validateForm();
}
init(e){
this.formToValidate.addEventListener('submit',this.submitForm(e));
}
}
const formValidator=new formValidator();
formValidator.init()代码>
更改
init(e){
this.formToValidate.addEventListener('submit',this.submitForm(e));
}
到
init(e){
this.formToValidate.addEventListener('submit',()=>this.submitForm(e));
}
您在init函数中有一个未定义的参数e。只需使用:
init() {
this.formToValidate.addEventListener('submit', this.submitForm);
}
('submit',this.submitForm(e))
不是在this.submitForm
不返回函数时添加事件侦听器的方式。如果运行该代码段,则会得到原因。您正在调用init
,但未提供e
。因为没有要提供的e
。因此,当您立即调用callthis.submitForm(e)
时,您将e
传递为未定义。1.从init
中删除e`。2.不要立即调用this.submitForm
,而是使用(e)=>this.submitForm(e)
作为回调。此外,您没有在formValidator.init()中通过e
@努尔你认为应该传递什么来让代码工作?@VLAZ,实现者知道,我不。。。