使用敲除js时Chrome中的最大长度约束验证奇怪之处



这里是jsfiddle

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
</head>
<p>First name: <input data-bind="value: firstName" maxlength="3" /></p>
<style>
input:invalid
{
border-color: #e67b7b;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
var viewModel = 
{ firstName: ko.observable("Ikram")
};
ko.applyBindings(viewModel);
});
</script>

在 Chrome 中,当旧值超过最大长度时,约束验证不会验证,直到我们编辑输入。当我们开始编辑时,它会变成红色。

在IE中,它按预期工作,当我们加载具有旧值的页面时,它会在开始时变为红色(验证(。

这看起来不像是一个淘汰赛问题。

<input value='my longname' maxlength="3" />

在丁目中也没有显示错误。

这是一个淘汰赛解决方法。

首先创建一个 hasError 计算的可观察性。

function hasErrorComputed(){   
return viewModel.firstName().length > 3;
}
iewModel.hasError = ko.computed(hasErrorComputed);

然后将 css 绑定到 hasError。

<input data-bind="css: {error: hasError}, value: firstName" maxlength="3" />

这是 jsfiddle

使用自定义绑定可以实现更雄辩的解决方案:http://knockoutjs.com/documentation/custom-bindings.html

或扩展器 http://knockoutjs.com/documentation/extenders.html

请联系了解更多详情。

最新更新