【问题标题】:Knockout Validation required validation IE8淘汰验证需要验证 IE8
【发布时间】:2013-05-16 20:09:08
【问题描述】:

我有一个使用 knockoutjs 和 knockoutvalidation 的简单表单。在兼容模式下运行 IE 时,我有以下行为。

一个字段是必需的。:

self.oldPassword = ko.observable().extend({ required: true});

加载页面时,我可以在调试模式下看到消息是:必填字段

但是当我开始输入时,错误变为:请输入一个大于或等于 true 的值。

我在这里迷路了,因为我想至少也支持 IE8。我在 IE10、Chrome 或 FireFox 中没有这个问题。而且我不想用淘汰模型和验证重写我所有的 javascript 文件。

这个问题听起来很熟悉吗?有没有解决办法?

【问题讨论】:

    标签: knockout.js knockout-validation


    【解决方案1】:

    我会扫描您的虚拟机以查找最小验证规则的任何实例,并确保未将其设置为 true。该错误消息特定于内置的 min 规则,如果您将该规则的参数设置为 true,它将吐出该错误消息。

    我用以下方法重现了问题:

    var vm = function () {
        var self = this;
    
        self.oldPassword = ko.observable().extend({ required: true });
    
        self.oldPassword.extend({
            min: true
        });
    }
    

    如果您根本没有使用 min 规则,请确保敲除验证 js 文件不正确或奇怪。

    【讨论】:

      【解决方案2】:

      Knockout 验证检查是否已在您的 observable 绑定的元素上指定了 html-5 验证属性,并添加了等效的验证规则。这是它检查的 html-5 验证属性列表:

      var html5Attributes = ['required', 'pattern', 'min', 'max', 'step'];
      

      对于它们中的每一个,它都会调用 hasAttribute 函数:

      hasAttribute: function (node, attr) {
          return node.getAttribute(attr) !== null;
      }
      

      在 IE7/IE8 兼容模式下,node.getAttribute(attr) 如果未找到属性则返回空字符串,因此此表达式“node.getAttribute(attr) !== null”始终为真。

      因此,您在兼容模式下的 observable 将有 5 条额外的验证规则。 幸运的是,这一切都与真正的 IE7/IE8 无关

      【讨论】:

      • 我遇到了同样的问题,并试图以一些 hacky 的方式解决它。我很高兴这只是兼容模式下的问题。当我有时间使用 IE 8 设置虚拟机时,我需要对其进行测试。
      猜你喜欢
      • 2016-05-14
      • 2015-02-28
      • 2012-02-18
      • 2012-11-04
      • 1970-01-01
      • 2015-02-03
      • 2011-08-09
      • 2013-07-01
      • 2017-09-26
      相关资源
      最近更新 更多