js复选框用于控制输入字段的启用/禁用状态
knockout.js checkboxes used to control enabled/disabled state of input fields
我试图将一个复选框绑定到对象列表中的每一行,以非常类似于这里问/回答的问题的方式:将对象列表绑定到复选框列表
基本上如下:
<ul data-bind="foreach: phones">
<li>
<input type='text' data-bind="attr: {value:phone}, disable: $root.selectedPhones"/>
<input type="checkbox" data-bind="attr: {value:id}, checked: $root.selectedPhones" />
</li>
</ul>
<hr/> selected phones:
<div data-bind="text: ko.toJSON($root.selectedPhones)"></div>
<hr/> phones:
<div data-bind="text: ko.toJSON($root.phones)"></div>
function Phone(id,phone) {
this.id = id;
this.phone = phone;
}
var phones_list = [
new Phone(1, '11111'),
new Phone(2, '22222'),
new Phone(3, '33333')
];
var viewModel = {
phones: ko.observableArray(phones_list),
selectedPhones: ko.observableArray()
};
ko.applyBindings(viewModel);
这个想法是,在初始状态下,所有的输入框都是禁用的,单击复选框将启用该行中的输入框。
数据来自一个相当深嵌套的对象从服务器端,所以我想避免"填充"数据与一个额外的布尔值避免 new Phone(1,'xx', false)
(a)因为它可能是不必要的(b)因为结构几乎肯定会改变…
selectedPhones
可观察对象可以被enable/disable功能用来控制该"行"中字段的状态吗?
希望有人能帮忙....
这里有一个jsfield
您可以创建一个小的辅助函数来检查给定的id
是否在selectedPhones
中:
var viewModel = {
phones: ko.observableArray(phones_list),
selectedPhones: ko.observableArray(),
enableEdit: function(id) {
return ko.utils.arrayFirst(viewModel.selectedPhones(),
function(p) { return p == id })
}
};
那么你可以在enable
绑定中使用这个辅助函数:
<input type='text' data-bind="attr: {value:phone}, disable: $root.enableEdit(id)"/>
演示JSFiddle。
相关文章:
- 按钮未启用,如果复选框处于打开状态
- 在检查单选按钮检查状态后启用/禁用表单元素
- 尝试将提交按钮的状态从禁用更改为启用
- 根据客户端变量的状态有条件地启用/禁用 @Html.DropDownListFor
- 禁用浏览器后退按钮,但在我的 asp.net 应用程序中保持启用状态
- 在触摸设备上的悬停状态后启用链接,而不会影响正常滚动
- 在后退按钮上保留HTML表单输入启用状态
- jQuery Mobile–切换单选按钮的启用和禁用状态
- 根据php中附带的复选框更改生成的文本框可见性或启用状态
- js复选框用于控制输入字段的启用/禁用状态
- 如何启用窗口.在弹出窗口中显示状态
- Struts - JSP -基于复选框状态启用/禁用按钮和文本框,使用Java Script
- 当按下后退按钮时,将按钮更改为启用状态
- 是否可以用Microsoft JScript查询窗口的启用/禁用状态?
- 检查事件-rsvp状态并显示禁用/启用rsvp按钮
- 如何在HTML元素处于活动状态时才启用验证?
- jQuery-启用/禁用复选框状态后的按钮
- 如果复选框处于启用状态,请选择td元素
- 如何在jQuery中获取禁用和启用按钮的状态
- 始终使所有三个选择元素处于启用状态