【问题标题】:jQuery validation engine required blocks my custom required validator所需的 jQuery 验证引擎阻止了我的自定义所需验证器
【发布时间】:2012-09-03 06:41:22
【问题描述】:

我有一个包含 2 个文本输入和 2 个单选按钮的表单。 一个单选按钮是当客户希望所有未来的通信都通过纸质邮件进行时,另一个按钮是当客户希望通过电子邮件进行通信时。

当用户选择电子邮件时,用户需要用他的电子邮件地址填写其中一个输入文本框。当用户选择邮政时,他必须在另一个框中填写邮政地址。

我有一个自定义的 jquery 验证引擎功能:

function checkBillRoutePostalAddressConflict(field, rules, i, options){
  var fieldValue = field.val();
  var accountIdR = field.attr('id').match(/\d+$/);
  var radioButton = jQuery('#postalBillsDestination_' + accountIdR);
  if(!fieldValue && radioButton.attr("checked")){
    alert('options.allrules.checkBillRoutePostalAddressConflict.alertText') // for debugging
    return options.allrules.checkBillRoutePostalAddressConflict.alertText;
  }
}

验证器与类一起添加到我的输入文本字段class="validate[funcCall[checkBillRoutePostalAddressConflict]]"

问题是它不起作用。显示调试警报消息,这意味着条件正确。如果我用我的其他自定义验证器之一替换它,那么一切正常。

有人告诉我,如果您将自定义验证函数写入一个不应该为空的字段,那么该消息不会显示,因为 jQuery 希望您使用 validate[required]。

如果这是真的,有没有人知道某种不太老套的解决方法?

一种选择是直接使用showPrompt,但也许有更干净更好的东西?
谢谢!

【问题讨论】:

    标签: javascript jquery jquery-validate


    【解决方案1】:

    元素的规则不仅可以是真假,还可以是一个函数。该函数可以检查是否选中了电子邮件复选框并返回 true(否则返回 false):

    $('#form').validate({
        'rules': {
            'email_text_field': {
                'required': function() { return $('#email-radio').is(':checked'); }
            }
        }           
    });
    

    这里使用默认的required验证器。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2019-01-28
      • 2019-12-15
      • 2017-07-08
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多