Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как сделать проверку полей на js (https://javascript.ru/forum/dom-window/6411-kak-sdelat-proverku-polejj-na-js.html)

boris2000 26.11.2009 19:27

как сделать проверку полей на js
 
есть скрипт для проверки полей на правильность заполнения формы и выдачи пользователю предупреждения если что не так. скрипт не работает, помогите.

// объявлю массивы
fieldnames_array = new Array("authorf", "authorio", "authorcity", "authorcountry", "authorindex", "authorstreet", "authorinstitution", "authoremail");
fielddescription_array = new Array("authoraddress", "authorio", "authorcity", "authorcountry", "authorindex", "authorstreet", "authorinstitution", "authoremail");

// функция проверки поля - не пустое ли оно
function textOK(e) { return (e.value != "") ? true : false; } 

// функция провеки всего масссива полей и выдачи сообщения пользователю
function checkSomeFields(f){
	var msg;
	for(j=0; j<=fieldnames_array.length; j++) {
		if(!textOK(f.fieldnames_array[j])){
			msg = msg + "\n\r" + fielddescription_array[j];
		}
	}
alert (msg);
return true;
}


и в самой форме прописываю
<form action="/gbd/add_new_datasource.php" method="post" onSubmit="return checkSomeFields(this);">

Octane 26.11.2009 20:57

Цитата:

Сообщение от boris2000
// функция проверки поля - не пустое ли оно
function textOK(e) { return (e.value != "") ? true : false; }

Boolean-значение, которое получается в результате операции сравнения, вам не нравится?
function textOK(e) { return e.value != ""; }


Ошибка, наверное, здесь:
Цитата:

Сообщение от boris2000
f.fieldnames_array[j]

вы неправильно формируете аксессор.
f[fieldnames_array[j]]


Массивы лучше объявлять так:
// объявлю массивы
var fieldnames_array = ["authorf", "authorio", "authorcity", …, "authoremail"];

B~Vladi 26.11.2009 23:36

Цитата:

Сообщение от Octane
Массивы лучше объявлять так:

Чем же конструктор не угодил?

Octane 27.11.2009 01:20

Цитата:

Сообщение от B~Vladi
Чем же конструктор не угодил?

Хотя бы потому, что так меньше писать, ну и так в MDC рекомендуют из-за возможности создать массив заданной длины, передав в конструктор один числовой аргумент:
Цитата:

Сообщение от MDC: JavaScript style guide
Цитата:

Use [value1, value2] to create a JavaScript array in preference to using new Array(value1, value2) which can be confusing, as new Array(length) will actually create a physically empty array with the given logical length, while [value] will always create a 1-element array. You cannot actually guarantee to be able to preallocate memory for an array.


boris2000 27.11.2009 11:27

исправил, дополнил, упрочил - все равно не работает!

форма теперь имеет имя
<form action="/gbd/add_new_datasource.php" method="post" name="frm" onSubmit="return checkSomeFields(this);">

// объявлю массивы
var fieldnames_array = ["authorf", "authorio", "authorcity", "authorcountry", "authorindex", "authorstreet", "authorinstitution", "authoremail"];
var fielddescription_array = ["authoraddress", "authorio", "authorcity", "authorcountry", "authorindex", "authorstreet", "authorinstitution", "authoremail"];

// функция провеки всего масссива полей и выдачи сообщения пользователю
function checkSomeFields(){
	var msg;
	for(j=0; j<=fieldnames_array.length; j++) {
		if(document.frm.fieldnames_array[j].value !="")){
			msg = msg + "\n\r" + fielddescription_array[j];
		}
	}
alert (msg);
return true;
}

Octane 27.11.2009 14:57

Цитата:

Сообщение от boris2000
document.frm.fieldnames_array[j].

Читайте внимательнее по ссылке про аксессоры.

boris2000 27.11.2009 15:42

спасибо, исправил на document.frm[fieldnames_array[j]].value
но НЕ РАБОТАЕТ! увы!
почитал в сети, посмотрел всякие примеры - вроде должно работать, ан нет! пока вернулся к доработке кода на php, доделаю - примусь за js, который я не знаю.

Octane 27.11.2009 16:00

Покажите страничку с формой, по одному коду трудно сказать, что там еще не работает.

boris2000 27.11.2009 16:27

http://www.kidneyepidemiology.org/gb...rkingform.html
спасибо если поможете!

Octane 27.11.2009 16:32

Цитата:

Сообщение от boris2000
if(document.frm.fieldnames_array[j].value !="")){

А тут кстати синтаксическая ошибка: лишняя закрывающая круглая скобка

-----------

// функция провеки всего масссива полей и выдачи сообщения пользователю
function checkSomeFields() {
	var elements = document.forms["frm"].elements;
	var element;
	var msg = "";
	for(j = 0; j <= fieldnames_array.length; j++) {
		element = elements[fieldnames_array[j]];
		if (element && element.value) {
			msg += "\n\r" + fielddescription_array[j];
		}
	}
alert (msg);
return true;
}


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