【问题标题】:Input field from Knockout Template not accepting the input mask来自敲除模板的输入字段不接受输入掩码
【发布时间】:2017-05-23 15:53:21
【问题描述】:

我有一个增值税注册号字段。 我从 JQuery.InputMask 库中为其分配了一个掩码;

$("input.vatreg").inputmask("999-9999-99");

在 Knockout 中,我使用以下编辑模板;

<script id="editTmpl" type="text/html">
    <tr>
        <td><input data-bind="value: Name, hasFocus: addNew" /></td>
        <td><input data-bind="value: VatRegistrationNumber" class="vatreg" /></td>
        <td>
            <button data-bind="click: $root.acceptItemEdit" style="margin-right:10px;">Accept and Save</button>
            <button data-bind="click: $root.cancelItemEdit">Cancel</button>
        </td>
    </tr>
</script>

如您所见,这使用了 vatreg 类,我的期望是该字段会启用掩码,但事实并非如此。 我该如何解决这个问题?

【问题讨论】:

  • 你在哪里执行"$("input.vatreg").inputmask("999-9999-99");"?可能是在 dom 中存在元素之前尝试添加掩码。
  • 是的,我认为这是问题

标签: jquery knockout.js jquery-inputmask


【解决方案1】:

认为您可能需要自定义绑定。我做了一个。运行下面的sn-p。顶部输入框是自定义绑定。下面的跨度是可观察的值。最后一个输入框是测试更新可观察对象并确保更新输入掩码。

ko.bindingHandlers.inputmask = {
  init: function(element, valueAccessor, allBindingsAccessor) {
    $(element).inputmask("999-9999-99", {
      "oncomplete": function() {
        valueAccessor()($(element).val());
      }
    });

    //handle disposal (if KO removes by the template binding)
    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
      $(element).inputmask("destroy");
    });

  },
  //update the control when the view model changes
  update: function(element, valueAccessor, allBindingsAccessor) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    $(element).val(valueAccessor()());
  }
};



function model() {
  var self = this;
  this.VatRegistrationNumber = ko.observable('888-8888-88');

}

var mymodel = new model();

$(document).ready(function() {
  ko.applyBindings(mymodel);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/dist/jquery.inputmask.bundle.js"></script>

<p>
input mask:
<input data-bind="inputmask: VatRegistrationNumber" class="vatreg" />
</p>
</br>
<p>
  input mask value: <span data-bind="text: VatRegistrationNumber"></span>
</p>

<br>
update the value <input data-bind="value: VatRegistrationNumber" class="vatreg" />

【讨论】:

  • 是的。尽管似乎不需要以下更新行; var value = ko.utils.unwrapObservable(valueAccessor());我打电话给我的处理程序 inputmaskvatreg 只是为了清楚它的用途。
猜你喜欢
  • 2021-09-05
  • 2012-10-25
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
相关资源
最近更新 更多