Javascript 无法读取属性';价值';形式上的未定义错误
我有一个基于表单模板的注册表单。它工作正常,但我还需要它添加名字、姓氏和电话号码,所以我将其更改为:Javascript 无法读取属性';价值';形式上的未定义错误,javascript,forms,Javascript,Forms,我有一个基于表单模板的注册表单。它工作正常,但我还需要它添加名字、姓氏和电话号码,所以我将其更改为: <form method="post" name="registration_form" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>"> First Name: <input type='text' name='firstname' id='firstname' /
<form method="post" name="registration_form" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>">
First Name: <input type='text' name='firstname' id='firstname' /><br>
Last Name: <input type='text' name='lastname' id='lastname' /><br>
Phone: <input type='tel' name='phone' id='phone' /><br>
Username: <input type='text' name='username' id='username' /><br>
Email: <input type="text" name="email" id="email" /><br>
Password: <input type="password"
name="password"
id="password"/><br>
Confirm password: <input type="password"
name="confirmpwd"
id="confirmpwd" /><br>
<input type="button"
value="Register"
onclick="return regformhash(this.form,
this.form.firstname,
this.form.lastname,
this.form.phone,
this.form.username,
this.form.email,
this.form.password,
this.form.confirmpwd);" />
</form>
我现在在表单页面和与“confirmpwd”字段关联的Javascript页面上都出现了“无法读取未定义属性‘value’”错误。该字段不是空的,并且名称与原始模板没有更改,唯一更改的是将姓名和电话添加到表单中。您忘记了uid参数。两件事,您的函数不匹配。首先,您将传入8个参数,其中不包括
uid
的值,该函数需要9个输入。这些值最终不会像您期望的那样排列,因此,当函数运行时,confirmpwd
是未定义的,当您尝试获取未定义的属性时,您会得到一个“无法读取未定义的属性‘值’”
错误
由于uid
不在表单中,而且您也没有验证username
,因此我假设您正在尝试验证username
,并相应地更新了您的函数
函数regformhash(表单、名字、姓氏、电话、用户名、电子邮件、密码、confirmpwd){
//检查每个字段是否有一个值
如果(username.value=''firstname.value=''lastname.value=''phone.value=''email.value=''password.value=''confirmpwd.value=''){
警报(“您必须提供所有请求的详细信息。请重试”);
}
返回false;
}
传递给regformhash
的参数数量与参数数量不相等this.form.firstname
在函数体中变为uid
,等等。不相关:当您完成此操作后,您可能需要对照='
检查修剪后的值,例如|lastname.value.trim()='''.|
等(以避免字段仅填充空格)@StephenP,我将在字段工作后添加适当的验证。这也是我的想法,但在我基于此的模板表单中,表单中没有声明uid参数,但它在Javascript文件中。这是原始的.js文件。请记住,这个表单确实有用,我测试了它,它工作得很好,当我添加3个附加字段时,它就停止了。哦,还有,那是.js文件中的错误部分,我现在正在更新它。好的,实际上我只是在.js文件中删除了uid参数,因为它似乎不需要。一开始我很困惑,因为它在原始框架中,当我添加的3个字段不在那里时它确实起作用了。很酷,我以为uid参数应该在那里,因为它在我使用的原始框架中,但我把它直接拿出来,稍加调整,它就起作用了。
function regformhash(form, uid, firstname, lastname, phone, username, email, password, confirmpwd) {
// Check each field has a value
if (uid.value == '' || firstname.value == '' || lastname.value == '' || phone.value == '' || email.value == '' || password.value == '' || confirmpwd.value == '') {
alert('You must provide all the requested details. Please try again');
return false;
}