在我的webapp中,我需要允许用户以一种形式输入无限的电子邮件地址,我有一个很好的工作方式,它允许添加多个输入字段,并且由于下面的问题,我正在完美地验证它们。
我已经阅读了这个问题,并对我的代码进行了修改,并且可以在控制台中确认它是否验证了每个输入字段,并且不允许提交表单。
我的问题是,它只显示一个输入字段的“请输入您的电子邮件”。例如,如果我有两个字段,并在第一个字段中输入电子邮件,则在第一个输入字段下显示的第二个输入显示的“请输入您的电子邮件”。
有什么可能的方法让大家都知道呢?
到目前为止这是我的JS
var validator = $(".webapp_auth_login_validation").validate({
rules: {"email[]": "required"},
messages: {"email[]": "Please enter you email"}
});
$('.webapp_js_cu_email_new').click(function(){
$('.webapp_js_cu_email_container').append('<div class="col-md-4 form-group"><label>Additional Email: <span class="text-danger">*</span></label><a href="javascript:void(0);" class="webapp_js_cu_email_remove" title="Remove field"> Remove </a><input type="text" name="email[]" class="form-control required"></div>');
});
$('.webapp_js_cu_email_container').on('click', '.webapp_js_cu_email_remove', function(e){
e.preventDefault();
$(this).parent('div').remove();
});这是页面上的html。
<div class="row webapp_js_cu_email_container">
<div class="col-md-4 form-group">
<label>Email Address: <span class="text-danger">*</span></label> <a href="javascript:void(0);" class="webapp_js_cu_email_new" > Add </a>
<input type="text" name="email[]" class="form-control required">
</div>
发布于 2016-05-09 08:59:02
这是一个解决你的问题的方法。
var validator = ...用于向输入提供带有email[]名称的模板。
然后与它们的email-input类一起选择它们,并在createValidation()函数中为规则提供一个email类型和required回调-以及一个自定义错误消息。
当您向表单中添加电子邮件输入时,将首次调用该函数。
var emailCounter = 1;
var validator = $(".webapp_auth_login_validation").validate({
rules: {
"email[]": "required"
},
messages: {
"email[]": "Please enter you email"
}
});
var createValidation = function() {
$(".email-input").each(function() {
$(this).rules('remove');
$(this).rules('add', {
email: true,
required: true,
messages: {
email: "Not a valid email.",
required: "Please enter an email adress."
}
});
});
}
$('.webapp_js_cu_email_new').click(function() {
$('.webapp_js_cu_email_container').append('<div class="col-md-4 form-group"><label>Additional Email: <span class="text-danger">*</span></label><a href="javascript:void(0);" class="webapp_js_cu_email_remove" title="Remove field"> Remove </a><input id="email[' + (emailCounter) + ']" type="text" name="email[' + (emailCounter) + ']" class="form-control required email-input"></div>');
// Increment input counter
++emailCounter;
// Create validation
createValidation();
});
$('.webapp_js_cu_email_container').on('click', '.webapp_js_cu_email_remove', function(e) {
e.preventDefault();
$(this).parent('div').remove();
});
// Kick validation
$(document).ready(function() {
createValidation();
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<form class="webapp_auth_login_validation">
<div class="row webapp_js_cu_email_container">
<div class="col-md-4 form-group">
<label>Email Address: <span class="text-danger">*</span>
</label> <a href="javascript:void(0);" class="webapp_js_cu_email_new"> Add </a>
<input type="text" name="email[0]" class="form-control required email-input">
</div>
</div>
<input type="submit">
</form>
发布于 2016-05-09 08:44:05
您的JS代码是正确的,问题在于HTML代码。您说有一个电子邮件列表,然后您需要和数组,但您必须为该数组设置索引,否则DOM将不会得到良好的格式和验证器将失败。
尝试为每个输入字段设置和索引。
<div class="col-md-4 form-group">
<label>Email Address: <span class="text-danger">*</span></label> <a href="javascript:void(0);" class="webapp_js_cu_email_new" > Add </a>
<input type="text" name="email[0]" class="form-control required">
</div> 在这里添加正确的索引:
$('.webapp_js_cu_email_new').click(function(){
$('.webapp_js_cu_email_container').append('<div class="col-md-4 form-group"><label>Additional Email: <span class="text-danger">*</span></label><a href="javascript:void(0);" class="webapp_js_cu_email_remove" title="Remove field"> Remove </a><input type="text" name="email[+obtainIndex()+]" class="form-control required"></div>');
});发布于 2016-05-09 09:22:02
您可以尝试在下面的代码中验证每个字段的所需验证以及每个字段的有效电子邮件地址检查,在此中,我使用count变量在每个元素中添加索引,并创建一个函数,在每次添加新字段后添加电子邮件和必需字段的验证规则。函数名为callToEnhanceValidate,请尝试下面的代码,它将解决您所需和有效的电子邮件地址验证的问题。
<form class="webapp_auth_login_validation">
<div class="row webapp_js_cu_email_container">
<div class="col-md-4 form-group">
<label>Email Address: <span class="text-danger">*</span></label> <a href="javascript:void(0);" class="webapp_js_cu_email_new" > Add </a>
<input type="text" name="email[]" class="form-control required emailValidate">
</div>
</div>
<input type="submit">
</form>
<script type= text/javascript>
var count = 1;
var validator = $(".webapp_auth_login_validation").validate({
rules: {"email[]": "required"},
messages: {"email[]": "Please enter you email"}
});
var callToEnhanceValidate=function(){
$(".emailValidate").each(function(){
$(this).rules('remove');
$(this).rules('add', {
required: true,
email : true,
minlength:2,
messages: {
required: "Please enter you email"
},
});
})
}
$('.webapp_js_cu_email_new').click(function(){
count++;
$('.webapp_js_cu_email_container').append('<div class="col-md-4 form-group"><label>Additional Email: <span class="text-danger">*</span></label><a href="javascript:void(0);" class="webapp_js_cu_email_remove" title="Remove field"> Remove </a><input type="text" name="email['+count+']" class="form-control required emailValidate"></div>');
callToEnhanceValidate();
});
$('.webapp_js_cu_email_container').on('click', '.webapp_js_cu_email_remove', function(e){
e.preventDefault();
$(this).parent('div').remove();
});
</script>在这篇文章中,我还在每个动态生成的字段和第一个字段中添加了新的类"emailValidate“,所以现在这段代码验证了所需的和电子邮件验证这两种验证,您也可以尝试在下面运行
https://stackoverflow.com/questions/37048950
复制相似问题