javascript - LiveValidation .remove 不工作

标签 javascript livevalidation

我有一个使用 LiveValidation 扩展的 Webform。我有一个条件规则,如果用户选择美国,那么州或省字段必须在州缩写列表中。

我的问题是,如果用户选择美国然后返回并更改他们的答案,则应删除验证规则,以便他们可以输入任何旧文本字符串。我已经四重检查了我的语法,函数返回的是 liveValidation 对象而不是错误对象,但规则没有被删除。任何建议将不胜感激。

这是脚本:

            if($('#edit-submitted-state-or-province').length){    
            var field12 = new LiveValidation('edit-submitted-state-or-province', { validMessage: " ", onlyOnBlur: true });
            field12.add( Validate.Presence,  { failureMessage: "Please enter your state or province." }  );
            }
            $('#edit-submitted-country').change(function() {
                var stateList = new Array("","AK"..."WY");
                if($("#edit-submitted-country").val() == "United States"){
                    field12.add( Validate.Inclusion, {within: stateList, failureMessage: "Please enter a valid 2-letter state abbreviation."});
                }
                else{
                    field12.remove( Validate.Inclusion, {within: stateList, failureMessage: "Please enter a valid 2-letter state abbreviation."});
                }
            });

最佳答案

可能来不及回答这个问题了,但是这里...

LiveValidation.remove 的文档指出“您必须向它传递与添加验证时使用的参数完全相同的参数”。尽管验证函数 (Validate.Inclusion) 相同,但参数对象每次都会不同。它“看起来”相同并不重要(也就是说,您应该比较添加的对象和删除的对象之间每个属性的值的结果),这意味着它必须是相同的对象。确保这一点的唯一方法是将参数对象的声明移到您正在操作验证对象的回调中,以便它只创建一次,而不是每次调用回调时都创建。

这是代码(顺便说一句,我重命名了您的 ID)。我还确保验证检查只能添加一次。

$(function() {

var field12,
    added = false,
    stateList = ["", "AK", "CO", "WY"]; // etc
    params = {
        within: stateList,
        failureMessage: "Please enter a valid 2-letter state abbreviation."
    };    

if ($('#state').length) {    
  field12 = new LiveValidation('state', {
      validMessage: " ",
      onlyOnBlur: true
  });

  field12.add(Validate.Presence, {
      failureMessage: "Please enter your state or province."
  });

}

$('#country').change(function() {
  if ($("#country").val() == "United States") {
      if (!added) {
          field12.add(Validate.Inclusion, params);
          added = true;
      }
  }
  else {
      if (added) {
          field12.remove(Validate.Inclusion, params);
          added = false;
      }
  }
});

});

关于javascript - LiveValidation .remove 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756102/

相关文章:

javascript - 无法在提交时验证表单

javascript - 使用 LiveValidation 滚动到第一个表单错误

javascript - 更改 SVG <text> 而不更改其子 <tspan> 的正确方法

javascript - 使用 useEffect 将 react 查询状态移动到 useState

javascript - 通过 localStorage 和 url 参数动态变量

javascript - Livevalidation - 正则表达式问题

javascript - 如何获取任何 Android 手机的 MAC 地址?

javascript - 无法识别但在同一文件夹中的文件

javascript - LiveValidation - 将验证消息更改为图片?

javascript - 如何检查屏蔽的输入字段是否为空