输入上的敲除更改事件:验证 - 如果无效则设置焦点

时间:2015-07-07 08:13:44

标签: javascript jquery knockout.js

我有一个由敲除绑定的表,输入字段在。我成功使用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;
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您只需使用knockout hasFocus binding即可。当它true时,元素就会得到焦点。

注意:在大多数情况下,您应该使用computed来确定输入中的值是否有效,而不是使用更改事件。您可以将事件与KO一起使用,但这并不是您想要的自然方式。例如,您可以创建一个名为valid的计算器,并使用如下绑定:data-bind="hasFocus: !valid()"

你应该看一下这个,这对你在KO中的验证有很大帮助:Knockout Validation