逐个验证表单的字段
Validate fields of a form one by one
我有一个包含7个字段的表单。当我将它提交到"register.php"页面时,它将逐一处理每个字段并输出结果。但这将输出整个结果。但我需要使用ajax验证数据,并逐个收集输出,并在离开字段时将其显示给用户。
在验证之后,我还需要在一次点击中发送所有字段;通过使用提交按钮。
html文件
<form action="register.php" method="post" class="ajax">
<ul>
<li>Username*:<br> <input type="text" name="username" required></li>
<li>Password*:<br> <input type="password" name="password" required></li>
<li>Confirm the Password*:<br> <input type="password" name="password_again" required></li>
<li>First Name*:<br> <input type="text" name="first_name" required></li>
<li>Last Name:<br> <input type="text" name="last_name"></li>
<li>Email*:<br> <input type="text" name="email" required></li>
<li><input type="submit" value="Register"></li>
</ul>
</form>
register.js文件
$('form.ajax').on('submit',function(){
var that = $(this),
url = that.attr('action'),
type = that.attr('method'),
data = {};
that.find('[name]').each(function(index,value){
var that =$(this),
name =that.attr('name'),
value = that.val();
data[name] = value;
});
$.ajax({
url: url,
type: type,
data: data,
success: function(response) {
document.getElementById("demo").innerHTML= response;
}
});
return false;
});
我的php文件:
if (empty($errors)=== TRUE) {
if (user_exists($_POST['username'])=== TRUE) {
$errors[] = 'Sorry, the Username '''. $_POST['username'] . ''' is already in use';
}
if (preg_match("/''s/", $_POST['username'])== TRUE) {
$errors[] = 'Username must not contain any spaces';
}
if (strlen($_POST['password']) < 6) {
$errors[] = 'Your password must be at least 6 characters';
}
if ($_POST['password'] !== $_POST['password_again']) {
$errors[] = 'Passwords do not match';
}
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)=== FALSE) {
$errors[] = 'Invalid email address';
}
if (email_exists($_POST['email']) === TRUE) {
$errors[] = 'Sorry, the email address '''. $_POST['email'] . ''' is already in use';
}
}
}
if (isset($_GET['success']) && empty($_GET['success'])) {
echo "You've been registered successfully!";
}
else{
if (empty($_POST)=== FALSE && empty($errors) === TRUE) {
$register_data = array(
'username' => $_POST['username'],
'password' => $_POST['password'],
'first_name'=> $_POST['first_name'],
'last_name' => $_POST['last_name'],
'email' => $_POST['email'],
);
register_user($register_data);
header('Location: register.php?success');
exit();
}else if(empty($errors)=== FALSE){
我没有以任何方式对此进行测试,但它应该可以工作。我为每个所需的表单元素分配一个已验证的属性,当输入模糊时将其验证到服务器,然后在提交表单之前检查是否没有任何未验证的元素。
var $form = $('form.ajax'),
$fields = $form.find('input[required]');
$fields.attr('validated', false).on('blur', function(){
var $this = $(this);
if($this.val() != ''){
var payload = {};
// create name=value object to post to server
payload[$this.attr('name')] = $this.val();
$.ajax({
url: $form.attr('action'),
data: payload,
method: 'POST',
success: function(response){
if(response.valid) { // or whatever
$this.attr('validated', true);
}
}
})
}
})
$form.on('submit', function(){
if($this.find('input[validated=false]')){
return false;
}
return true;
})
相关文章:
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 添加和删除隐藏字段数组中的值,而不提交表单
- 单击鼠标,用MySQL数据填充html表单输入字段
- 带有条件字段的PHP表单
- 防止在输入字段上单击事件
- 高级自定义字段按单选按钮值排序
- 使用JQuery启用输入字段的单选框
- SmartyStreets:使用条件字段调整表单中已验证勾号的位置
- 组合功能以使用 Jquery 在一组单选按钮中显示输入字段和单选按钮
- 使只读字段不可单击
- 使用 JavaScript 进行 HTML 字段表单验证
- JavaScript 在不输入输入字段/表单的情况下传递输入
- JQuery 在动态添加输入字段时单击浏览,而 ajax 不起作用
- 我可以让时间选择器在输入字段中单击时触发吗?
- 将隐藏字段表单值传递给控制器
- 隐藏小视口中的字段,单击按钮再次显示
- 我可以给html文本字段表单中的元素提供相同的名称和id吗
- 在新行上显示输入字段(基于单选)
- 在文本字段(表单)后插入节点
- 动态生成的名称字段的单选按钮组验证