我在Javascript中实现组合规则存在逻辑问题。
简而言之:
解决这个逻辑问题的智能方法是什么?提前谢谢!
基本上,我怎么记得单击'度量1'已经禁用'度量8',因此切换'度量4'不会意外地重新启用'度量8'而'度量1'仍然'在'?
此处的所有代码:https://gist.github.com/1055968
答案 0 :(得分:0)
逻辑上我会做这样的事情:
我正在尝试实现这一点。
编辑 - 我实现了我的想法。这是一个小提琴http://jsfiddle.net/Tvs7E/1/function createObjectsWithRules(rulesApplied){
var presentBlock = {};
for (var checkboxid in rulesApplied){
var presentCombos = rulesApplied[checkboxid];
for(var key in presentCombos) {
var obj = presentCombos[key];
for(var prop in obj) {
var s = obj[prop];
presentBlock[s] = true;
}
}
}
return presentBlock;
}
$(document).ready(function() {
var rulesApplied= {};
$('input').change(function() {
current_cb = this;
if ($(this).attr("checked")) {
// toggle on
console.log("You ticked on " + current_cb.id);
combos = JSONSelect.match("." + current_cb.id, combinations);
rulesApplied[current_cb.id] = combos;
for(var key in combos) {
var obj = combos[key];
for(var prop in obj) {
var s = obj[prop];
$('#' + s).attr('disabled', 'disabled');
console.log("I disable " + obj[prop]);
}
}
console.log(rulesApplied);
return;
}
// toggle off
console.log("You ticked off " + current_cb.id);
combos = JSONSelect.match("." + current_cb.id, combinations);
console.log(combos);
delete rulesApplied[current_cb.id];
console.log(rulesApplied);
presentRules = createObjectsWithRules(rulesApplied);
console.log(presentRules);
for(var key in combos) {
var obj = combos[key];
for(var prop in obj) {
var s = obj[prop];
if (!presentRules[s]){
$('#' + s).removeAttr('disabled');
console.log("I enable " + obj[prop]);
}
}
}
return;
});
});
答案 1 :(得分:0)
尝试将.change事件更改为此
http://paste.pocoo.org/show/424704/
它执行之前的操作,只是不使用空返回来模拟if-else。
然后当点击输入完成后,它会遍历所有输入以“重新禁用”任何需要禁用的内容。
只是轻轻地测试了
我可以看到,在我写这篇文章时,大卫在评论中提出了同样的建议。这是一回事,只需要一个代码示例。