如何触发使用 Parsley.js 动态创建的元素的验证?

Posted

技术标签:

【中文标题】如何触发使用 Parsley.js 动态创建的元素的验证?【英文标题】:How do I trigger validation on elements created on the fly with Parsley.js? 【发布时间】:2017-10-28 10:51:32 【问题描述】:

我有一个 jQuery UI 对话框,其中包含一些我正在尝试使用 Parsley.sj 验证的内容,但我一定做错了,因为输入没有得到验证。这就是我正在做的验证表单:

$(function() 
  $('#create_quote_dialog').dialog(
    autoOpen: false,
    title: 'Options',
    modal: true,
    resizable: false,
    width: 1000,
    height: 600,
    buttons: [
      text: 'Cancel',
      click: function() 
        $(this).dialog('close')
      ,
    , 
      text: 'Continue',
      click: function() 
          $('#ctq_frm').parsley();
      
    ]
  )

  $('#create_quote').click(function(ev) 
    var create_quote_dialog = $('#create_quote_dialog');
    create_quote_dialog.show().dialog('open');
  );
);

我在这里缺少什么?我做了一个小jsFiddle 来玩。

【问题讨论】:

【参考方案1】:

在这个片段中:

click: function() 
   $('#ctq_frm').parsley();

您忘记提交表单:

click: function () 
    $('#ctq_frm').parsley();
    $('#ctq_frm').submit();

jQuery UI 按钮有类型按钮,而不是提交。这就是问题所在。

$('#create_quote_dialog').dialog(
    autoOpen: false,
    title: 'Options',
    modal: true,
    resizable: false,
    width: 1000,
    height: 600,
    buttons: [
        text: 'Cancel',
        click: function () 
            $(this).dialog('close')
        ,
    , 
        text: 'Continue',
        click: function () 
            $('#ctq_frm').parsley();
            $('#ctq_frm').submit();
        
    ]
)
$('#create_quote').click(function (ev) 
    var create_quote_dialog = $('#create_quote_dialog');
    create_quote_dialog.show().dialog('open');
);
<link href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.7.2/parsley.min.js"></script>


<div id="create_quote_dialog" style="display: none;">
  <form name="ctq_frm" id="ctq_frm" novalidate="">
    <table class="table" id="customer_to_quote">
      <thead>
        <tr>
          <th>Parent</th>
          <th>Customer</th>
          <th>Agreement ID</th>
          <th>Agreement Type</th>
          <th>CF Program Level</th>
          <th>distributor.id</th>
          <th>Start Date</th>
          <th>end.date</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>
            <input type="checkbox" class="parent_checkbox" value="30" name="parent" data-parsley-multiple="parent">
          </td>
          <td>
            <input type="hidden" name="customerSiteId" value="30"> Etheridge Electric Inc.
          </td>
          <td>
            <input type="hidden" name="agreementId" value="0"> 0
          </td>
          <td>
            <select name="agreementType" class="form-control" required="">
              <option value="">-- Please select one --</option>
              <option value="1">Percentage Support</option>
              <option value="2">Consignment Support</option>
              <option value="7">Mobile Solutions</option>
              <option value="9">SmartGlance Subscription</option>
              <option value="10">Customer FIRST Lite</option>
              <option value="11">Solution Support - LPS</option>
              <option value="12">InSight Subscription</option>
            </select>
          </td>
          <td>
            <select name="cfProgramLevel" class="form-control" required="">
              <option value="">-- Please select one --</option>
              <option value="1">Primary</option>
              <option value="2">Standard</option>
              <option value="3">Premium</option>
              <option value="4">Elite</option>
            </select>
          </td>
          <td>
            <input type="hidden" name="distributorId" value="16"> 16
          </td>
          <td>
            <input type="text" class="start_date form-control" name="StartDate" required style="width: 100px;">
          </td>
          <td>
            <input type="text" class="end_date form-control" name="EndDate" required style="width: 100px;">
          </td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" class="parent_checkbox" value="31" name="parent" data-parsley-multiple="parent">
          </td>
          <td>
            <input type="hidden" name="customerSiteId" value="31"> United States Gypsum
          </td>
          <td>
            <input type="hidden" name="agreementId" value="32415"> 32415
          </td>
          <td>
            <input type="hidden" name="agreementType" value="1"> Percentage Support
          </td>
          <td>
            <input type="hidden" name="cfProgramLevel" value="2"> Standard
          </td>
          <td>
            <input type="hidden" name="distributorId" value="28"> 28
          </td>
          <td>
            <input type="hidden" name="startDate" value="01/01/2017"> 01/01/2017
          </td>
          <td>
            <input type="hidden" name="endDate" value="12/31/2017"> 12/31/2017
          </td>
        </tr>
      </tbody>
    </table>
  </form>
</div>

<button type="button" id="create_quote">Create Quote</button>

【讨论】:

以上是关于如何触发使用 Parsley.js 动态创建的元素的验证?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 4 中正确实现 Parsley.js 自定义远程验证器

Parsley JS - 禁用单个验证器的消息

使用对象填充的 parsley.js 验证 <select> 时遇到问题

如何让 Parsley JS 验证在 Tinymce 富文本区域上工作?具体来说,如何通知 Parsley.js Tiny MCE 的更改?

即使 Parsley 验证失败,.submit() 也会始终执行

parsley之验证属性设置