KnockoutJS observable不会观察jQuery的empty()事件

时间:2012-06-21 15:50:37

标签: javascript jquery knockout.js

我有几个文本框:local&外国电话号码和一个复选框来切换它们,如下所示:

  TogglePhoneFields = function(isForeign) {
    if (isForeign) {
      $('#Phone_LocalNumber').attr('disabled', 'disabled');
      $('#Phone_LocalNumber').val('');
      $('#Phone_ForeignPhoneNumber').removeAttr('disabled');
      return $('#Phone_ForeignPhoneNumber').focus();
    } else {
      $('#Phone_LocalNumber').removeAttr('disabled');
      $('#Phone_ForeignPhoneNumber').attr('disabled', 'disabled');
      return $('#Phone_ForeignPhoneNumber').val('');
    }
  };

标记式:

<input data-bind="value: localnumber" 
    id="Phone_LocalNumber" type="text" value='' />

<input data-bind="checked: isForeignPhoneNumber" 
    id="Phone_IsForeignPhoneNumber" type="checkbox" value="true" />

<input data-bind="value: foreignphonenumber" 
    id="Phone_ForeignPhoneNumber" type="text" value="" />

我已经对这些电话号码进行了验证,很明显在您输入本地电话号码中的值后,勾选“IsForeign”复选框(它调用TogglePhoneFields(true))并取消勾选,可观察值未被清除

我很难解释这一点,如果不清楚的话,我可以写一个jsFiddler。 问题基本上是如何在javascript代码操纵其值时更新可观察项目?

1 个答案:

答案 0 :(得分:2)

Knockout值绑定订阅了它们绑定的输入上的更改事件。如果使用val更新jquery中的输入,则需要触发更改事件,否则将不会触发值绑定。

所以例如

$('#Phone_LocalNumber').val('').change();

希望这有帮助。