首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用验证插件jquery验证输入数组-显示每个输入的错误

问使用验证插件jquery验证输入数组-显示每个输入的错误
EN

Stack Overflow用户
提问于 2016-05-05 11:03:40
回答 3查看 4.9K关注 0票数 3

在我的webapp中,我需要允许用户以一种形式输入无限的电子邮件地址,我有一个很好的工作方式,它允许添加多个输入字段,并且由于下面的问题,我正在完美地验证它们。

如何使用验证插件jquery验证输入数组

我已经阅读了这个问题,并对我的代码进行了修改,并且可以在控制台中确认它是否验证了每个输入字段,并且不允许提交表单。

我的问题是,它只显示一个输入字段的“请输入您的电子邮件”。例如,如果我有两个字段,并在第一个字段中输入电子邮件,则在第一个输入字段下显示的第二个输入显示的“请输入您的电子邮件”。

有什么可能的方法让大家都知道呢?

到目前为止这是我的JS

代码语言:javascript
复制
    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。

代码语言:javascript
复制
<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>                          

​

http://jsfiddle.net/gL1k4efa/6/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-09 08:59:02

这是一个解决你的问题的方法。

var validator = ...用于向输入提供带有email[]名称的模板。

然后与它们的email-input类一起选择它们,并在createValidation()函数中为规则提供一个email类型和required回调-以及一个自定义错误消息。

当您向表单中添加电子邮件输入时,将首次调用该函数。

​

代码语言:javascript
复制
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();
});
代码语言:javascript
复制
<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>

​

票数 3
EN

Stack Overflow用户

发布于 2016-05-09 08:44:05

您的JS代码是正确的,问题在于HTML代码。您说有一个电子邮件列表,然后您需要和数组,但您必须为该数组设置索引,否则DOM将不会得到良好的格式和验证器将失败。

尝试为每个输入字段设置和索引。

代码语言:javascript
复制
<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> 

在这里添加正确的索引:

代码语言:javascript
复制
$('.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>');
});
票数 1
EN

Stack Overflow用户

发布于 2016-05-09 09:22:02

您可以尝试在下面的代码中验证每个字段的所需验证以及每个字段的有效电子邮件地址检查,在此中,我使用count变量在每个元素中添加索引,并创建一个函数,在每次添加新字段后添加电子邮件和必需字段的验证规则。函数名为callToEnhanceValidate,请尝试下面的代码,它将解决您所需和有效的电子邮件地址验证的问题。

代码语言:javascript
复制
    <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“,所以现在这段代码验证了所需的和电子邮件验证这两种验证,您也可以尝试在下面运行

用于工作演示所需的和电子邮件验证两种验证的小提琴链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37048950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档