Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2014, 15:16
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

Проверка полей
Здравствуйте есть код проверка полей на необходимые символы, здесь только не происходит выборка из полей, а данные уже есть в объекте data
var data = {
		first_name: "Super",
		last_name: "Man",
		age: "unknown",
		username: "o_O"
	}
	

var validator = {

	// все доступные проверки
	types: {},
	
	// сообщение об ошибках
	// в текущем сеансе проверки
	messages: [],
	
	// текущие параметры проверки
	// имя: тип провеки
	config: {},
	
	// интерфейсный метод
	// аргумент `data` - 'это пары ключ => значение
	validate: function (data) {
	
		var i, msg, type, checker, result_ok;
		//удалить все сообщения
		this.messages = [];
		
		for (i in data) {
		
			if (data.hasOwnProperty(i)) {
			
				type = this.config[i];
				checker = this.types[type];
				
				if(!type) {
					continue; // проверкане требуется
				}
				if (!checker) { // ай-ай-ай-ай
					throw {
						name: "ValidationError",
						massage: "No handler to validate type " + type
					};
				}
				result_ok = checker.validate(data[i]);
				if (!result_ok) {
					msg = "Invalid value for *" + i + "*, " +
							checker.instructions;
					this.messages.push(msg);
				}
			}
		}
	return this.hasErrors();
	},

	// вспомогательный метод
	hasErrors: function () {
		return this.messages.length !==0;
	}
}

validator.config = {
	first_name: 'isNonEmpty',
	age: 'isNumber',
	username: 'isAlphaNum'
};

// проверяет наличие значения
validator.types.isNonEmpty = {
	validate: function (value) {
		return value !== "";
	},
	instructions: "the value cannot be empty"
};

// проверяет, является ли значение числом
validator.types.isNumber = {
	validate: function (value) {
		return !isNaN(value);
	},
	instructions: "the value can only be a valid number, e.g. 1, 3.14 or 2010"
};

// проверяет, содержит ли значение только буквы и цифры
validator.types.isAlphaNum = {
	validate: function (value){
		return !/[^a-z0-9]/i.test(value);
	}, 
	instructions: "the value can only contain characters and numbers,no special symbols"
}


validator.validate(data);
	if(validator.hasErrors()) {
		console.log(validator.messages.join("\n"));
	}

Этот код работает проверил в консоли firebug, но здесь есть для меня не понятные моменты
пусть в этой строчке checker = this.types[type]; определилось isNonEmpty тогда выполнится функция
validator.types.isNonEmpty = {
	validate: function (value) {
		return value !== "";
	},
	instructions: "the value cannot be empty"
};

здесь если я правильно понимаю выолняется функция validate c аргументом value, тоесть не могу понять если посмотреть на эту функцию то она и сама выпоняется но из результатов видно что выполняется функция
validate: function (data) {
	
		var i, msg, type, checker, result_ok;
		//удалить все сообщения
		this.messages = [];
		
		for (i in data) {
		
			if (data.hasOwnProperty(i)) {
			
				type = this.config[i];
				checker = this.types[type];
				
				if(!type) {
					continue; // проверкане требуется
				}
				if (!checker) { // ай-ай-ай-ай
					throw {
						name: "ValidationError",
						massage: "No handler to validate type " + type
					};
				}
				result_ok = checker.validate(data[i]);
				if (!result_ok) {
					msg = "Invalid value for *" + i + "*, " +
							checker.instructions;
					this.messages.push(msg);
				}
			}
		}
	return this.hasErrors();
	}

только как связать эту функция и этот возврат return value !== ""; который я встречаю в первые но как я понял он срабатывает если строка не пустая а если пустая то в эту переменную checker.instructions; записывается какое либо строка в зависимости от выполняемой функции
когда мы попали на метку validat: мы доходим до этого участка
result_ok = checker.validate(data[i]);
				if (!result_ok) {
					msg = "Invalid value for *" + i + "*, " +
							checker.instructions;
					this.messages.push(msg);
				}

вот опять не понятно инструкция выполняется если result_ok ==false, как она может быть фолс если data[i] существует?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка полей js. MorroWIndss Элементы интерфейса 1 16.05.2014 08:38
Проверка полей при потере фокуса Paltusssss Общие вопросы Javascript 2 13.08.2013 19:32
Проверка полей на форме alex_89 Общие вопросы Javascript 2 13.05.2011 14:12
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14