我有几个文本框: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代码操纵其值时更新可观察项目?
答案 0 :(得分:2)
Knockout值绑定订阅了它们绑定的输入上的更改事件。如果使用val更新jquery中的输入,则需要触发更改事件,否则将不会触发值绑定。
所以例如
$('#Phone_LocalNumber').val('').change();
希望这有帮助。