【发布时间】:2016-12-09 17:24:08
【问题描述】:
HTML
<form method='POST' id='signup_form'>
<label for='email'>E-mail:</label><br />
<input type='email' name='email' /><br /><br />
<label for='username'>Username:</label><br />
<input type='text' name='username' /><br /><br />
<label for='password'>Password:</label><br />
<input type='password' name='password' /><br /><br />
<label for='confirmpassword'>Confirm Password:</label><br />
<input type='password' name='confirmpassword' /><br /><br />
<input type='submit' name='signup' />
</form>
JavaScript
const signup_form = document.getElementById('signup_form');
signup_form.addEventListener('submit', function() {
event.preventDefault();
let missing_input = false;
for (let i = 0; i < this.children.length; i++) {
if (this.children[i].type !== undefined && this.children[i].type !== 'submit')
if (this.children[i].value === '') {
missing_input = true;
break;
}
}
if (!missing_input)
this.submit();
});
因此,在将表单提交给 PHP 之前,我尝试在我的 JavaScript 中进行一些验证。如果用户尝试提交表单,我会检查输入以查看它们是否为空白,如果其中任何一个为空白,则我不提交表单。该功能运行良好,但是当表单提交时,<input type='submit' name='signup' /> 不会出现在_POST 中。所有其他输入都可以。在我实现事件监听器之前它工作正常。
这是$_POST提交成功后的样子:
Array ( [email] => eric@live.ca [username] => ericsartor [password] => asdasdasd [confirmpassword] => asdasdasd)
我做错了什么吗?如果我删除事件侦听器肯定可以正常工作,但我不明白为什么如果阻止提交按钮包含在请求中...
编辑:感谢 Andre 发布的链接,我找到了解决方案。我发布了自己的答案,但我还不能接受。
【问题讨论】:
-
没有
value到submit这可能就是原因!试试<input type='submit' name='signup' value='Submit' />等 -
我确实尝试添加一个值,但没有任何区别。事实上,当我删除事件侦听器并像往常一样提交表单时,PHP 会分配一个默认值“提交”来提交看起来的元素。我一直在使用
if (isset($_POST['signup']))来检查表单提交,并且在没有明确值的情况下运行良好!
标签: javascript php forms post