gpt4 book ai didi

javascript - 使用 jquery 验证表单输入字段

转载 作者:技术小花猫 更新时间:2023-10-29 12:11:23 24 4
gpt4 key购买 nike

  1. 我正在处理表单验证。一切正常,我真正想要的是我想添加更多输入字段,如复选框、单选按钮、选择和文本区域、上传文件等到我希望它们也被验证的表单中。

    <
  2. 我收到了电子邮件输入错误,但它没有正常工作,因为它应该首先验证电子邮件,然后它应该删除错误消息,但它在输入几个字符后就删除了错误消息。

  3. 我想要验证电话号码。就像用户应该输入印度的 10 个数字一样,如果在另一个国家会有所不同,我有点困惑该怎么做。

  4. 我希望在所有字段都按预期正确验证时弹出一条成功消息。我试过的是:

    $('.success_msg').fadeIn().delay(3000).fadeOut();
    $('input , textarea , select').val('').removeClass('valid');
    event.preventDefault();
  5. 我希望在完成所有验证并发送成功消息后清除所有字段。

谁能指出我正确的方向?

var Validator = function(formObject) {
this.form = $(formObject);

var Elements = {
name: {
reg: /^[a-zA-Z]{2,20}$/,
error: "Not a valid name.",
},

email: {
reg: /^[a-z-0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,7}$/i,
error: "Not a valid e-mail address.",
},
phone: {
reg: /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,
error: "Not a valid number.",
},

message: {
reg: /^(?!\s*$).+/,
error: "Message field cannot be empty.",
},
};

var handleError = function(element, message) {
element.addClass('input-error');
var $err_msg = element.parent('div');
$err_msg.find('.error').remove();
var error = $('<div class="error"></div>').text(message);
error.appendTo($err_msg);
element.keyup(function() {
$(error).fadeOut(1000, function() {
element.removeClass('input-error');
});
});

};

this.validate = function() {
var errorCount = 0;
this.form.find("input, textarea").each(function(index, field) {
var type = $(field).data("validation");
var validation = Elements[type];
if (validation) {
if (!validation.reg.test($(field).val())) {
errorCount++;
handleError($(field), validation.error);
}
}
})
return errorCount == 0;
};
};

$(function() {
$("form#test").on("submit", function(event) {
//event.preventDefault();
return new Validator(this).validate(); // "this" here refers to the form

})
})
body {
background: #fff;
color: #333;
font: 76% Verdana, sans-serif;
}

form {
margin: 1em 0 0 2em;
width: 90%;
}

fieldset {
margin: 0;
border: 1px solid #ccc;
padding-bottom: 1em;
}

legend {
font-weight: bold;
text-transform: uppercase;
}

label {
float: left;
width: 5em;
padding-right: 2em;
font-weight: bold;
}

div {
margin-bottom: 30px;
}

input {
font: 1em Verdana, sans-serif;
}

fieldset ul li input {
float: left;
width: 120px;
border: 1px solid #ccc;
}

textarea {
width: 300px;
height: 200px;
border: 1px solid #ccc;
font: 1em Verdana, sans-serif;
}

form p {
margin: 0;
padding: 0.4em 0 0 7em;
}

form p input {
background: #666;
color: #fff;
font-weight: bold;
}

div.error {
clear: left;
margin-left: 5.3em;
color: red;
padding-right: 1.3em;
height: 100%;
padding-bottom: 0.3em;
line-height: 1.3;
}

.input-error {
background: #ff9;
border: 1px solid red;
}

.success_msg {
width: 350px;
line-height: 40px;
border: 1px solid green;
border-radius: 5px;
background-color: rgba(213, 255, 187, 0.7);
display: none;
position: absolute;
bottom: 5px;
left: 50%;
transform: translateX(-50%);
z-index: 999;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post" id="test">

<fieldset>

<legend>Contact information</legend>


<div>
<label for="firstname">Firstname:</label>
<input type="text" name="firstname" id="firstname" data-validation="name" />
</div>


<div>
<label for="lastname">Lastname:</label>
<input type="text" name="lastname" id="lastname" data-validation="name" />
</div>

<div>
<label for="email">Email:</label>
<input type="email" name="email" id="email" data-validation="email" />

</div>
<div>
<label for="phone">phone</label>
<input type="number" name="phone" id="phone" data-validation="phone" />
</div>

<div>
<label>Gender:</label>
<input type="radio" name="gender" value="male" data-validation="gender" />
<input type="radio" name="gender" value="female" data-validation="gender">
</div>

<div>
<label>select</label>
<input type="checkbox" name="checkbox" id="checkbox1" value="demo1" data-validation="checkbox" />
<input type="checkbox" name="checkbox" id="checkbox2" value="demo2" data-validation="checkbox" />
<input type="checkbox" name="checkbox" id="checkbox3" value="demo3" ata-validation="checkbox" />
</div>

<select data-validation="selectOption">
<option value="">Select any option</option>
<option value="red">Red</option>
<option value="blue">Blue</option>
<option value="green">Green</option>
</select>

<div>
<label>Upload:</label>
<input type="file" name="file" id="file" data-validation="file" />
</div>

<div>
<label for="message">Message:</label>
<textarea id="message" name="message" cols="30" rows="15" data-validation="message"></textarea>
</div>

<p><input type="submit" name="send" id="send" value="Send" /></p>

</fieldset>
<div class="success_msg">
<p>Form submitted Successfully</p>
</div>
</form>

在花时间回答问题之前,请随时消除您的疑虑。

最佳答案

这是工作代码:

https://jsfiddle.net/bhumi/o2gxgz9r/47570/

我已将选择器更改为使用 id

您需要在处理错误时使用循环:

var Validator = function(form) {

this.form = $(form);

var Elements = {
name: {
selector: $('input[type=text]'),
reg: /^[a-zA-Z]{2,20}$/
},

email: {
selector: $('input[type=email]'),
reg: /^[a-z-0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,7}$/i
},

message: {
selector: $('textarea'),
reg: /^\s+$/
}
};

var handleError = function(element, message, v1) {
if (v1.selector.length > 1) {
var ss = v1.selector;

$(ss).each(function(i, v) {
$(v).removeClass('input-error');
if($(v).val() == ''){
$(v).addClass('input-error');
var $err_msg = $(v).parent('div');
if($(v).parent('div').find('.error').length == 0) {
var error = $('<div class="error"></div>').text(message);
}else{
$(v).parent('div').find('.error').text('');
var error = $(v).parent('div').find('.error').text(message);
$(this).siblings('.error').show();
}
error.appendTo($err_msg);
}else{
$(v).siblings('.error').text('')
}
$(v).keyup(function() {
$(error).fadeOut(1000, function() {
element.removeClass('input-error');
});
});
});
} else {
element.addClass('input-error');
var $err_msg = element.parent('div');
if(element.parent('div').find('.error').length == 0) {
var error = $('<div class="error"></div>').text(message);
}else{
element.parent('div').find('.error').text('');
var error = element.parent('div').find('.error').text(message);
$(this).siblings('.error').show();
}
error.appendTo($err_msg);
element.keyup(function() {
$(error).fadeOut(1000, function() {
element.removeClass('input-error');
});
});
}

};

this.validate = function() {

this.form.submit(function(e) {

for (var i in Elements) {

var type = i;
var validation = Elements[i];
switch (type) {
case 'name':
if (!validation.reg.test(validation.selector.val())) {
handleError(validation.selector, 'Not a valid name.', validation);
}
break;
case 'email':
if (!validation.reg.test(validation.selector.val())) {
handleError(validation.selector, 'Not a valid e-mail address.', validation);
}
break;
case 'message':
if (validation.reg.test(validation.selector.val()) || validation.selector.val() == '') {
handleError(validation.selector, 'Message field cannot be empty.', validation);
}
break;
default:
break;


}

}

e.preventDefault();
});

};
};

var validator = new Validator('#test');
validator.validate();

关于javascript - 使用 jquery 验证表单输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50622987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com