Javascript 输入时的淘汰更改事件:验证-如果无效,则设置焦点
我有一个由knockout绑定的表,其中包含输入字段。我正在成功地使用更改事件验证其中一个输入,但我正在努力解决这一问题: 如果输入的数据不符合我的要求,我如何让knockout将焦点设置回输入 我已经尝试返回false以防止冒泡通过,但这会将焦点放在tr中的下一个输入上 标记:Javascript 输入时的淘汰更改事件:验证-如果无效,则设置焦点,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个由knockout绑定的表,其中包含输入字段。我正在成功地使用更改事件验证其中一个输入,但我正在努力解决这一问题: 如果输入的数据不符合我的要求,我如何让knockout将焦点设置回输入 我已经尝试返回false以防止冒泡通过,但这会将焦点放在tr中的下一个输入上 标记: <script> $(document).ready(function() { mynamespace.myVm.myModel = new personalInfoViewModel();
<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>
您只需使用。当它为
true
时,元素获得焦点
注意:在大多数情况下,不应使用更改事件,而应使用计算值来确定输入中的值是否有效。您可以将事件与KO一起使用,但这不是您想要的自然方式。例如,您可以创建一个名为valid
,并使用如下绑定:data bind=“hasFocus:!valid()”
您应该看看这一点,这将对KO中的验证有很大帮助:然后测试它,如果这是一个问题,请添加一个新问题。IE从IE6到IE11都得到了官方支持:我不担心古老的浏览器,我们把IE10+定位于那些仍然坚持IE的人。@JimFR抱歉,我是在回答G_的评论,没关系,我也是。似乎有必要回答:)
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;
}
}
}