Как я могу вспомнить состояния комбинации? - PullRequest
0 голосов
/ 30 июня 2011

У меня логическая проблема с реализацией правил комбинирования в Javascript.

Вкратце:

  • Я определяю, какие флажки не могут быть включены вместе с другими вобъект JSON.
  • Если щелкнуть меру 1 -> меры 7 и 8 будут выделены серым, это правильно.
  • Если я щелкну меру 4 -> меры 8, 9, 10и 11 становится серым, это тоже правильно.
  • Теперь, если я снова нажму на меру 4 -> мера 8 снова активируется, но не должно быть, потому что в «правилах» JSON говорится, что с момента измерения1 все еще проверяется, мера 8 должна быть серой.

Каков разумный способ решить эту логическую проблему?Заранее спасибо!

По сути, как я помню, что нажатие кнопки «мера 1» уже отключило «меру 8», чтобы переключение «меры 4» не включило случайно снова «меру 8»с 'мерой 1' все еще 'на'?

Весь код здесь: https://gist.github.com/1055968

Интерактивный: http://jsfiddle.net/gnijholt/58zuR/

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

Попробуйте изменить событие .change на это

http://paste.pocoo.org/show/424704/

Он делает то же, что и раньше, только без использования пустых возвратов для эмуляции if-else.

Затем, когда это делается с помощью нажатого входа, он проходит через все входы, чтобы «повторно отключить» все, что нужно отключить.

Только слегка проверено

И я вижу, чтопока я писал это, Дэвин делал то же самое в комментариях.То же самое, только с примером кода.

0 голосов
/ 30 июня 2011

Ну, по логике я бы сделал что-то вроде этого:

  • , когда вы ставите галочку, вы создаете объект, который хранит применяемые правила.
  • , когда я снимаю флажокфлажок, я удалю это правило из объекта памяти, и перед снятием отметки с каждого флажка я пройдусь по объекту памяти, чтобы увидеть, есть ли какие-либо конфликтующие правила.Если есть одно противоречивое правило, я не выделяю флажок.

Я пытаюсь реализовать это.

РЕДАКТИРОВАТЬ - я реализовал свою идею.вот такая скрипка 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;
            });
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...