Показать сообщение отдельно
  #1 (permalink)  
Старый 29.01.2018, 09:39
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

Вызов функции
Подскажите что это такое, и как GLOB передается ?
var validator = (function( GLOB ){
	return {

В общем работал раньше с формами вот этим валидатором.
/**
 * Объект "validator" 
 * version 1.2
 * autor Komarov Artem 
 * site : [url]http://php-zametki.ru[/url]
 * email: [email]arty-komarov@yandex.ru[/email]
 */
var validator = (function( GLOB ){
	return {
		// Объект для тестов. Здесь он пустой
		// Наполняется он в файле validator_tests.js
		tests : {},
		// Контейнер для элементов, которые потребуется сравнивать
		samples : {},
		/**
		 * Метод для валидации формы.
		 * Вешается на обработчик onsubmit
		 * @param object form: Объект html-формы.
		 * @return boolean true|false
		 */
		check : function ( form ) {
			var DOC      = GLOB.document,   // Зависимость 
				elements = form.elements,   // Здесь будут элементы формы
				elLength = elements.length, // Количество элементы формы
				require  = false, // Флаг: обязательно ли поле
				curItem  = null,  // Текущий (для цикла) элемент формы
				curVal   = null,  // Текущее (для цикла) значение элемента формы
				curTest  = null,  // Текущий (для цикла) класс/тест элемента формы
				curSample= null,  // Текущий элемент сравнения
				errSpan  = null,  // Контейнер для ошибок элемента формы
				tests    = new Array(), // Здесь будут классы/тесты элемента формы
				errors   = {},    // Флаг указывает есть ли ошибки
				prop     = null,  // Свойство для обхода объекта errors
				testsLength = 0,  // Количество классов/тестов элемента формы	
				outerLoop = null,
				innerLoop = null,
				errorLoop = null,
				i, // Счётчики циклов
				q;	
				
			this.samples = {};
				
			outerLoop: for (i = 0; i < elLength; i += 1) {
				// Получаем текущий элемент:	
				curItem  = elements[i];
				// Пропускаем элементы не имеющие атрибутов: class и value:
				if (typeof (curItem.className) === "undefined" || typeof (curItem.value) === "undefined") {
					continue outerLoop;
				}
				// Получаем текущее значение:
				curVal = curItem.value;
				// Узнаём обязателен ли текущий элемент:
				require = (curItem.className.indexOf("require") !== -1);								
				// Пытаемся получить ссылку на элемент-контейнер ошибок:
				errSpan = DOC.getElementById(curItem.name + "_error");
				// Если элемента-контейнера не существует
				if (!errSpan) {
					// ... формируем его:
					errSpan    = DOC.createElement("SPAN");
					errSpan.id = curItem.name + "_error";
					errSpan.className = "error";
					// и добавляем его в DOM - древо, 
					// сразу после текущего элемента формы.
					curItem.parentNode.insertBefore(errSpan, curItem.nextSibling);
				}
				// Если текущий элемент не обязателен и не заполнен...
				if (curVal.length < 1 && !require) {
					// Очищаем его контейнер, на случай, если он уже содержал текст ошибки,
					errSpan.textContent = "";
					// и пропускаем итерацию цикла.
					continue outerLoop;
				}
				// Получаем имена классов/тестов в массив:
				tests = curItem.className.split(" ");
				// Получаем длину массива:
				testsLength = tests.length;		
				
				// Проходим по массиву классов/тестов циклом:
				innerLoop: for (q = 0; q < testsLength; q += 1) {
					// Получаем текущее имя класса:	
					curTest  = tests[q];
					// Если текущее имя класса не является тестом...
					if (!this.tests.hasOwnProperty(curTest)) {
						// пропускаем итерацию.
						continue innerLoop;
					}
					// Собсна проверка:
					if (!curVal.match(this.tests[curTest].condition)) {
						// Устанавливаем флаг для этой ошибки:
						errors[curItem.name] = true;
						// Не удачно - пишем ошибку в контейнер:
						errSpan.textContent = this.tests[curTest].failText;					
						// Останавливаем цикл - вывод остальных ошибок для этого элемента не нужен,
						// - не зачем пугать пользователя, пусть сначала устранят ту ошибку что есть.
						break innerLoop;
					} else {
						// Снимаем флаг ошибки:
						errors[curItem.name] = false;
						// Удачно - очищаем контейнер от содержимого.
						errSpan.textContent = "";					
					} // END IF
				} // END innerLoop
				
				// Проверка идентичности значения полей				
				curSample = curItem.className.match(/\bconfirm-?\d{0,}\b/i);
				
				if ( curSample !== null ) {
					// Устанавливаем эталон:
					if (typeof(this.samples[curSample]) === "undefined"){
						this.samples[curSample] = curVal;						
					} else {
						if (this.samples[curSample] !== curVal) {
							errors[curItem.name + "_samples"] = true;
							errSpan.textContent = "Х";
						} else {
							errors[curItem.name + "_samples"] = false;
							errSpan.textContent = "";
						}						
					}													
				} 					
			} // END outerLoop
											
			/* 
			 * Проверяем наличие установленных флагов ошибок. 
			 * Если ошибок нет возвращаем true - в этом случае
			 * Обработчик "onsubmit" должен штатно отработать.
			 */ 
			errorLoop: for( prop in errors ) {
				if ( errors.hasOwnProperty(prop) && errors[prop] === true) {
					return false;
				}	
			}			
			return true;
			
		} // END CHECK		
	};
}(this));

http://php-zametki.ru/javascript-lab...validator.html
а теперь все формы поубирал и пытаюсь вызвать его по кнопке
в качестве параметра вместо формы хочу передать
var jsonList = document.querySelectorAll('.act');

но пока каша в голове полная.
на
var Result=validator.check(jsonList);

ругается что не понятен ему validator.

я так понимаю что параметр GLOB, передается для того что бы знать где создавать, надпись с ошибками, но как он передается ?

Раньше запускал его так, как тут туда передается форм ? this?

<script type="text/javascript">
document.forms['FormPageOptions'].onsubmit = function(){
	var Result=validator.check(this);
	if(Result==false){
		return  false;
	}
		SavePageOptions();
		return  false;
}
</script>
Ответить с цитированием