2016-11-09 44 views
1

读取未定义错误的属性'值'我有一个注册表单,我使用的是基于表单模板here。这是工作得很好,但我需要它也添加名字和姓氏和电话号码,所以我改成了这样:无法通过表格

 <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> 

我也不得不调整JavaScript的形式来接受新的值,这是现在这样的:

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; 
    } 

现在我得到了两个窗体页,并与“confirmpwd”字段关联的JavaScript页面上的错误“无法读取属性未定义的‘价值’”。该字段不是空的,并且名称没有从原始模板改变,唯一改变的是名字和姓氏以及电话被添加到表单中。

+1

的要传递到'regformhash'参数的数量不是等于参数的数量。 'this.form.firstname'在函数体内成为'uid',等等。 – DavidDomain

+0

无关:当你有这个工作时,你可能想检查_trimmed_值对'==''例如'|| lastname.value.trim()==''||'等(为了避免字段只填充空格) –

+0

@StephenP,是的,我会在字段工作后添加适当的验证。 –

回答

0

两件事情,您的功能没有匹配。首先,您将传递8个参数,不包括uid的值,以使函数等于9个输入。这些值最终不会按照您的预期排列,因此,当函数运行时,confirmpwd未定义,并且当您尝试获取未定义的属性时,会出现"Cannot read property 'value' of undefined"错误。

由于uid不是形式,你也没有验证username,我继续前进,并假设你试图验证username并相应地更新了你的函数。

function regformhash(form, firstname, lastname, phone, username, email, password, confirmpwd) { 
 
    // Check each field has a value 
 
    if (username.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; 
 
}
<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>

+0

很酷,我认为uid参数应该在那里,因为它是在我正在工作的原始框架中,但我把它直接拿出来,并且稍微调整一下,结果就出来了。 –

+0

Excellente!真高兴你做到了 –

-1

您忘记了uid参数

+0

这也是我的想法,但是在我基于此的模板形式中,表单中没有声明uid参数,但它在Javascript文件中。这里是原始.js文件[链接](https://github.com/peredurabefrog/phpSecureLogin/blob/master/js/forms.js)。请记住,这个表单确实用于工作,我测试了它,它工作得很好,当我添加3个附加字段时它就停止了。哦,这也是.js文件中的错误部分,我现在正在更新它。 –

+0

好吧,我其实刚刚结束了在.js文件中取出uid参数,因为它似乎并不需要。我最初感到困惑,因为它在原始框架中,并且当我添加的3个字段不存在时它确实起作用。 –