我有一个由敲除绑定的表,输入字段在。我成功使用change事件验证其中一个输入,但我正在努力解决这个问题:
如果输入的数据不符合我的要求,如何将焦点设置回输入?
我尝试返回false以防止通过,但这会将焦点放在tr中的下一个输入上。
标记:
<script>
$(document).ready(function() {
mynamespace.myVm.myModel = new personalInfoViewModel();
ko.applyBindings(mynamespace.myVmument.getElementById('divMyTable'));
}
</script>
<div id='divMyTable'>
<table>
<tbody data-bind="foreach: mynamespace.myVm.myModel">
<tr data-bind="event: { change: $root.markDirtyRow }">
<td><input data-bind="value: dto.PersonId,
event: { change: $root.validateId }"></td>
<td><input data-bind="value: dto.someValue"></td>
</tr>
</tbody>
</table>
</div>
敲除:
var personInfoViewModel = function () {
var self = this;
var self.myModel = ko.observableArray();
self.validateId = function (record) {
if (doValidate(record.PersonId)) { // for example
self.UserData(record.PersonId);
return true;
} else {
alert("Person Id " + record.PersonId + " is not recognised.");
return false;
}
}
}
答案 0 :(得分:0)
您只需使用knockout hasFocus
binding即可。当它true
时,元素就会得到焦点。
注意:在大多数情况下,您应该使用computed来确定输入中的值是否有效,而不是使用更改事件。您可以将事件与KO一起使用,但这并不是您想要的自然方式。例如,您可以创建一个名为valid
的计算器,并使用如下绑定:data-bind="hasFocus: !valid()"
。
你应该看一下这个,这对你在KO中的验证有很大帮助:Knockout Validation