我有75个选择框。它们中的每一个都被数据绑定到变量
MyModel.selectbox_1 = ko.observable(1);
MyModel.selectbox_2= ko.observable(2);
MyModel.selectbox_3= ko.observable(3);
MyModel.selectbox_4= ko.observable(3);
...
MyModel.selectbox_75= ko.observable(0);
每个选择框只有4个选项。
我希望能够根据用户对问题的回答来更改选择框。 例如,重置所有这些
var variable_name = "";
for (var i = 1; i < 76; i++) {
variable_name = 'MyModel.selectbox_' + i;
eval(variable_name)(0);
}
如果我这样做,浏览器会在几秒钟内没有响应,然后就可以了。
是否有更好的方法可以同时更改许多选择框?
可能与网络工作者在一起吗?
谢谢。
答案 0 :(得分:2)
你永远不应该使用eval
:
在这种情况下,你可以通过改变它来轻松避免它:
var variable_name = "";
for (var i = 1; i < 76; i++) {
variable_name = 'MyModel.selectbox_' + i;
eval(variable_name)(0);
}
致:
for (var i = 1; i < 76; i++) {
MyModel['selectbox_' + i](0);
}
但是你应该考虑使用数组作为选择:
var i,
Plan_Model = {
plan_spread_options: ko.observableArray(['0', '1', '2', '3', '4']),
selects: []
};
// init
for (i = 0; i < 75; i++) {
Plan_Model.selects.push(ko.observable(0));
}
// apply bindings
ko.applyBindings(Plan_Model, $("#plan_bilgileri")[0]);
// update
for (i = 0; i < Plan_Model.selects.length; i++) {
Plan_Model.selects[i](2);
}
请参阅更新的fiddle(另请参阅简化的html)。