Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ключи в ассоциативной переменной (https://javascript.ru/forum/misc/2735-klyuchi-v-associativnojj-peremennojj.html)

afandi 05.02.2009 10:34

ключи в ассоциативной переменной
 
Преамбула
===
Ну не умею я описывать задачки в программировании, однако все равно надеюсь, что кто-нибудь поймет и поможет.
===
Амбула
===
На сайте куча форм в которых пользователь вводит данные, правильность ввода которых проверяю яваскриптом. Чтобы как то упорядочить этот процесс в html перед формой добавляю такой код
<script>
var checker = {};
checker.name = false;
checker.email = false;
checker.passcode = false;
checker.msg = false;
</script>

Саму библиотеку функций по проверке вынес в отдельный файлик validate.js
Вот примерная функция
function check(input, checker) {
    var iName = input.name;
    if (iName == 'name') {
        if (input.value) {
            var errorDiv = document.getElementById('errorName');
            var okDiv = document.getElementById('okName');
            if (validName(input.value)) {
                checker.name = true;
                input.className = 'frame wide good'
                if (errorDiv) {
                    errorDiv.style.display = 'none';
                }
                if (okDiv) {
                    okDiv.style.display = 'block';
                }
            } else {
                checker.name = false;
                input.className = 'frame wide bad'
                if (errorDiv) {
                     errorDiv.style.display = 'block';
                }
            }
        } else {
           var okDiv = document.getElementById('okName');
           var errorDiv = document.getElementById('errorName');
           if (okDiv) {
               okDiv.style.display = 'none';
           }
           if (errorDiv) {
               errorDiv.style.display = 'none';
           }
           checker.name = false;
           input.className = 'frame wide';
        }
    }
    isAllRight(checker);
}

соответсвенно эта функция вешается на input в обработчик onkeyup
По замыслу последная функция (isAllRight) должна проветить все ли ключи в переменной checker имеют значение true и если да произвести какие-то действия. Например активировать кнопку submit

Вопрос.
Как пройтись по всем ключам, если я не знаю изначально какие ключи есть в переменной checker. Потому что такой механизм используется на разных формах с разным набором проверяемых инпутов.

Надеюсь не утомил и все понятно описал. Думаю что вы мне поможите

Kolyaj 05.02.2009 10:39

var hash = {a: 1, b: 2, c: 3};
for (var i in hash) 
  alert(i + ': ' + hash[i]);

Андрей Параничев 05.02.2009 15:33

Kolyaj,
На всякий случай можно так:
var hash = {a: 1, b: 2, c: 3};
for (var i in hash)
   if (hash.hasOwnProperty(i))
      alert(i + ': ' + hash[i]);


А то поставит в прототип какая-нибудь библиотека свой метод, и будет лишняя итерация.

Dmitry A. Soshnikov 05.02.2009 15:53

Цитата:

Сообщение от Андрей Параничев
и будет лишняя итерация

Итерация-то по-любому будет лишняя ;) Проверка лишь ее отсеет.

Андрей Параничев 05.02.2009 15:58

Dmitry A. Soshnikov,
Ну будет обработана лишняя итерация, так наверно правильней. :)


Часовой пояс GMT +3, время: 06:35.