使用 knockoutjs 时 Chrome 中的最大长度约束验证异常
Maxlength constraint validation oddity in Chrome when using knockoutjs
这里是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" />
在 chome 中也不显示错误。
这是一个淘汰赛解决方法。
首先创建一个 hasError computed obseable。
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
更多 eloquent 解决方案可以通过自定义绑定实现:http://knockoutjs.com/documentation/custom-bindings.html
或扩展器http://knockoutjs.com/documentation/extenders.html
请联系我们了解更多详情。
这里是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" />
在 chome 中也不显示错误。
这是一个淘汰赛解决方法。
首先创建一个 hasError computed obseable。
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
更多 eloquent 解决方案可以通过自定义绑定实现:http://knockoutjs.com/documentation/custom-bindings.html
或扩展器http://knockoutjs.com/documentation/extenders.html
请联系我们了解更多详情。