当多个输入具有相同名称时,根据输入类型设置 jquery 表单验证

Posted

技术标签:

【中文标题】当多个输入具有相同名称时,根据输入类型设置 jquery 表单验证【英文标题】:Set jquery form validation based on type of input when multiple inputs have same name 【发布时间】:2019-11-10 02:44:13 【问题描述】:

我有一个表admin_config,是这样的:-

在 Laravel 中构建表单时,我是这样做的:-

 Form::open(array(
                  'method' => 'POST',
                  'class' => 'form-horizontal form-label-left',
                  'route' =>  ['edit_settings'],
                  'id' => 'editSettingsForm',
                  'files' => true,
                  'novalidate' => true)) 

<div class="col-md-12 col-sm-12 col-xs-12">
  @foreach($configList as $key => $cl)
  <div class="item form-group">
    @php
    $caption = $cl['config_key'];
    $caption = str_replace('_', ' ', $caption);
    @endphp
    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="config_key">@if($caption == 'emails') 'Admin ' . ucfirst($caption) @else ucfirst($caption) @endif <span class="required">*</span>
    </label>
    <div class="col-md-9 col-sm-9 col-xs-12">
       Form::hidden('config_key[]', $cl['config_key'], array(
                              'id' => 'config_key_' . $key,
                              'class' => 'form-control col-md-7 col-xs-12',
                              'data-validate-length-range' => '3,50',
                              'placeholder' => 'Config Key',
                              'required' => 'required' )) 
      @if($cl['value_unit'] == 'date')
       Form::select('config_value[]', 
                      array(
                        'd-m-Y' => 'd-m-Y',
                        'd/m/Y' => 'd/m/Y',
                        'd.m.Y' => 'd.m.Y',
                        'Y-m-d' => 'Y-m-d',
                        'Y/m/d' => 'Y/m/d',
                        'Y.m.d' => 'Y.m.d',
                        'm-d-Y' => 'm-d-Y',
                        'm/d/Y' => 'm/d/Y',
                        'm-d-Y' => 'm.d.Y'
                      ), 
                      $cl['config_value'], 
                      array(
                        'class' => 'form-control col-md-7 col-xs-12', 
                        'id'    => 'config_value_' . $key
                      )) 
      @elseif($cl['value_unit'] == 'time')  
       Form::select('config_value[]', 
                      array(
                        'H:i:s'   => 'H:i:s',
                        'H.i.s'   => 'H.i.s',

                        'H:i'     => 'H:i',
                        'H.i'     => 'H.i',

                        'h:i:s A' => 'h:i:s A',
                        'h.i.s A' => 'h.i.s A',
                        'h:i:s a' => 'h:i:s a',
                        'h.i.s a' => 'h.i.s a',

                        'h:i A'   => 'h:i A',
                        'h.i A'   => 'h.i A',
                        'h:i a'   => 'h:i a',
                        'h.i a'   => 'h.i a'
                      ), 
                      $cl['config_value'], 
                      array(
                        'class' => 'form-control col-md-7 col-xs-12', 
                        'id'    => 'config_value_' . $key
                      )) 
      @elseif($cl['value_unit'] == 'url')  
       Form::url('config_value[]', $cl['config_value'], array(
                              'id' => 'config_value_' . $key,
                              'class' => 'form-control col-md-7 col-xs-12',
                              'data-validate-length-range' => '3,50',
                              'placeholder' => 'Config value',
                              'required' => 'required' )) 
      @else                      
       Form::text('config_value[]', $cl['config_value'], array(
                              'id' => 'config_value_' . $key,
                              'class' => 'form-control col-md-7 col-xs-12',
                              'data-validate-length-range' => '3,50',
                              'placeholder' => 'Config value',
                              'required' => 'required' )) 
      @endif
    </div>
  </div>
  @endforeach
  <div class="ln_solid"></div>
  <div class="form-group">
    <div class="col-md-6 col-md-offset-3">
      <a class="btn btn-primary back_new" href="url('/cpanel/dashboard/')">Back</a>
      <button id="send" type="submit" class="btn btn-success submit_new">Submit</button>
    </div>
  </div>
</div>

<div style="clear:both;"></div>
 Form::close() 

html 表单如下所示:-

我需要对表单进行 jquery 表单验证。当前的表单验证是这样的:-

$(document).ready(function()
    $("#editSettingsForm").validate(
        ignore: [],
        rules: 
            'config_value[]': 
                required: true
            
        ,
        messages: 
            'config_value[]': 
                required: "Please enter value"
            
        
    );
);

我想检查额外的验证,比如如果输入类型在 url 中,那么它将有特殊的 url 验证规则和消息。

我该怎么做?

编辑:

    多个输入元素具有相同的名称,即。配置值[]。 name=config_value[] 的一个元素可能是 type='text',而 name=config_value[] 的另一个元素可能是 type='url.'。 type='url' 的那个应该有 url 验证规则,而那个 type='text',不应该有 url 验证规则

【问题讨论】:

请检查此链接以进行 url 验证:jqueryvalidation.org/url-method 【参考方案1】:

您好,请尝试一下,希望这能解决您的 url 验证问题

$( "#myform" ).validate( 
  // This global normalizer will trim the value of all elements
  // before validatng them.
  normalizer: function( value ) 
    return $.trim( value );
  ,
  rules: 
    username: 
      required: true
    ,
    url_input: 
      required: true,
      url: true,

      // We don't need to trim the value of this element, so we overrided
      // the global normalizer in order to append 'http://' to the url value
      // if doesn't already.
      normalizer: function( value ) 
        var url = value;

        // Check if it doesn't start with http:// or https:// or ftp://
        if ( url && url.substr( 0, 7 ) !== "http://"
            && url.substr( 0, 8 ) !== "https://"
            && url.substr( 0, 6 ) !== "ftp://" ) 
          // then prefix with http://
          url = "http://" + url;
        

        // Return the new url
        return url;
      
    
  
 );

或者你也可以使用它

$( "#myform" ).validate(
  rules: 
    field: 
      required: true,
      url: true
    
  
);

【讨论】:

您是否意识到所有输入字段的名称相同,而输入类型可能不同?一个具有 name=config_value[] 的元素可能是 type='text',而另一个具有 name=config_value[] 的元素可能是 type='url.'。 type='url'的应该有url验证规则,type='text'的不应该有url验证规则。 对不起,我没有检查,但你可以使用 css 不确定它是否是你的解决方案codepen.io/desaraev/pen/ykLIp 或者你可以查看forum.jquery.com/topic/…

以上是关于当多个输入具有相同名称时,根据输入类型设置 jquery 表单验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel提交表单具有相同的输入名称ajax

如何使用多个具有相同名称的表单输入?

具有相同名称属性的输入字段的多个表单?是好是坏?

通过设置命令问题创建文件夹名称

在 django 中使用相同的输入名称上传多个文件

使用 codeigniter 将具有相同输入名称的表单输入插入数据库行