【问题标题】:Multipart jQuery validation多部分 jQuery 验证
【发布时间】:2012-09-17 10:29:13
【问题描述】:

我正在尝试分别验证表单的不同部分。不幸的是,表单是由 CMS 生成的,所以我的操作受到限制。

我尝试使用当前表单部分作为索引创建validate 对象数组。即:

  //initialize validation
  validators = [
    $('#donation_amount').validate({ rules:{ amount: { required: true } } }),
    $('#personal_information').validate({ rules:{ Street: { required: true } } })
   ];

并像这样在各个部分中切换:

  $('#btn-next').click(function() {
    //if validation is true, show next page
    if (validators[curOrder].valid()) {
      var old = $('.active');
      var oldOrder = old.attr('data-order');
      var newOrder = parseInt(oldOrder) + 1;
      old.removeClass('active');
      $("[data-order='" + newOrder + "']").addClass('active');
      curOrder = newOrder;
    }else{
      console.log("invalid");
   }
});

然而,验证总是返回true

这里是有问题的页面:https://salsa3.salsalabs.com/o/50388/p/salsa/donation/common/public/?donate_page_KEY=8461

【问题讨论】:

  • 您应该.validate() 放入 click 处理程序。它旨在初始化表单,并且应该在 document.ready 内。当您需要在事件中测试表单时,请使用.valid(),它将返回真/假。否则,您可以使用 .validate() 中已内置的事件。请参阅:thisthisthis
  • 好的,有道理。但是如何更改命令的验证规则?这似乎是我要在每个部分班次时重新初始化表单的地方。
  • 我不确定你在问什么,我也不完全明白你想怎么做。我过去所做的是将多部分表单分解为多个表单。在所有表单上初始化validate()一次,并在单击next 按钮时使用.valid() 测试表单。
  • 对不起,让我换个说法。因此,在每一步中,我只想验证显示字段。因此,如果我有一个全面的规则块,即使用户还没有访问这些字段,它也会返回一个无效的结果,对吧?
  • 那么我之前的评论就成立了。每个部分都有自己的form,您可以单独验证。否则,您将处理一些非常不必要的复杂问题。

标签: javascript jquery forms jquery-validate validation


【解决方案1】:

当您自己编写一些 JavaScript 时,为什么还要使用 .validate 插件。点击时,只需检查输入的值(如 $('#myInput').val().trim() == "")并针对每个输入显示/隐藏相应的错误 div。

此外,对于多部分验证,仅验证必填字段并继续应做的事情。

$('#btn-next').click(function() {
var amountValid = $('#donation_amount').val().trim() == '' ? false : true;
var infoValid = $('#personal_information').val().trim() == '' ? false : true;

if (amountValid && infoValid) {
  var old = $('.active');
  var oldOrder = old.attr('data-order');
  var newOrder = parseInt(oldOrder) + 1;
  old.removeClass('active');
  $("[data-order='" + newOrder + "']").addClass('active');
      curOrder = newOrder;
    }else{
      console.log("invalid");
    }
});

【讨论】:

  • 我将检查电子邮件地址、数字格式等的有效性。它还需要添加无效的标签和类。如果我扔掉验证插件,这一切似乎都是我在重新发明轮子,而且以一些相当麻烦的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多