Простая проверка формы. Добавить "динамики".
Необходимо написать простую проверку формы. Если необходимые поля формы не заполнены, то подсвечивать их красным и не отправлять форму.
Сейчас это выглядит так (и это работает):
//проверка формы заказа
function formsubmit(formName, reqFieldArr){
var curForm = new formObj(formName, reqFieldArr);
if(curForm.valid)
curForm.send();
else
curForm.paint();//покраска незаполенных полей
}
//объект форма
function formObj(formName, reqFieldArr){
var filledCount = 0;
var fieldArr = new Array();
for(i=reqFieldArr.length-1; i>=0; i--){
fieldArr[i] = new fieldObj(formName, reqFieldArr[i]);
if(fieldArr[i].filled == true)
filledCount++;
}
//валидность
if(filledCount == fieldArr.length)
this.valid = true;
else
this.valid = false;
//покраска незаполенных полей
this.paint = function(){
for(i=fieldArr.length-1; i>=0; i--){
if(fieldArr[i].filled == false)
fieldArr[i].paintInRed();
else
fieldArr[i].unPaintInRed();
}
}
//отправка
this.send = function(){
document.forms[formName].submit();
}
}
//объект поле
function fieldObj(formName, fName){
var curField = document.forms[formName].elements[fName];
if(curField.value != '')
this.filled = true;
else
this.filled = false;
this.paintInRed = function(){
curField.addClassName('red');
}
this.unPaintInRed = function(){
curField.removeClassName('red');
}
}
Вызывается проверка так:
<input type="button" onClick="formsubmit('orderform', ['name', 'post', 'payer', 'recipient', 'good'])" value="Отправить" />
Задача: как повесть onChange и blur на необходимые поля формы в рамках этого кода? Например: если поле подсвечено красным и пользователь начинает его заполнять, то оно должно становится белым. Если весь код - полная ерунда, то как это сделать лучше (нужен "объектный") вариант? |
значит нужно, чтобы объект формы сам вешал нужные обработчики. Реализация зависит от того, будет ли оно где-нибудь повторно использоваться или нет
Цитата:
и что там за такая хитрая проверка валидности? Почему не
this.valid = true;
for(i=reqFieldArr.length-1; i>=0; i--){
var f = new fieldObj(formName, reqFieldArr[i]);
if( ! fieldArr[i].filled ){
this.valid = false;
break;
}
}
да и вообще можно valid сделать методом. А то у тебя твои объекты - не просто объекты формы/поля, а объекты формы/поля в некоторый момент времени |
Ок, переделал. Замечания не учел.
//проверка формы заказа
function formsubmit(formName, reqFieldArr){
var curForm = new formObj(formName, reqFieldArr);
if(curForm.valid)
curForm.send();
else{
curForm.paint();//покраска незаполенных полей
curForm.listen();//прослушивание полей
}
}
//объект форма
function formObj(formName, reqFieldArr){
var filledCount = 0;
var fieldArr = new Array();
for(i=reqFieldArr.length-1; i>=0; i--){
fieldArr[i] = new fieldObj(formName, reqFieldArr[i]);
if(fieldArr[i].filled == true)
filledCount++;
}
//валидность
if(filledCount == fieldArr.length)
this.valid = true;
else
this.valid = false;
//покраска незаполенных полей
this.paint = function(){
for(i=fieldArr.length-1; i>=0; i--){
if(fieldArr[i].filled == false)
fieldArr[i].paintInRed();
else
fieldArr[i].unPaintInRed();
}
}
//отправка
this.send = function(){
document.forms[formName].submit();
}
//прослушивание полей
this.listen = function(){
for(i=fieldArr.length-1; i>=0; i--){
fieldArr[i].fieldListen();
}
}
}
//объект поле
function fieldObj(formName, fName){
var curField = document.forms[formName].elements[fName];
this.filled = getValueBool();
this.paintInRed = function(){
curField.addClassName('red');
}
this.unPaintInRed = function(){
curField.removeClassName('red');
}
//прослушивание
this.fieldListen = function(){
curField.onkeyup = function(){
if(curField.value != ''){
curField.removeClassName('red');
}
else{
curField.addClassName('red');
}
}
}
function getValueBool(){
if(curField.value != '')
return true;
else
return false;
}
}
Не нравится мне этот код, но он работает и я не смог его улучшить не переписывая полностью. |
а спрашивал зачем тогда? Еще раз, у тебя ООП ради ООП, писал бы на функциях и людей не смущал
и что прослушивание включается только после попытки отправить форму? Цитата:
|
| Часовой пояс GMT +3, время: 20:47. |