Login   Register  
PHP Classes
elePHPant
Icontem

File: class.formulario.js

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of José Manuel Carnero  >  Formulario  >  class.formulario.js  >  Download  
File: class.formulario.js
Role: Auxiliary data
Content type: text/plain
Description: Validations, javascript
Class: Formulario
Generate and validate HTML forms
Author: By
Last change: Minor changes and bugs corrected.
Date: 4 years ago
Size: 14,326 bytes
 

Contents

Class file image Download
/*****************************************************************************/
/*************************VALIDACIONES DE FORMULARIOS*************************/
/*****************************************************************************/

/*
Copyrigth: Peter-Paul Koch (http://www.quirksmode.org/dom/maxlength.html)
maxlength para textareas
se usa poniendo maxlength="1234" en los "textarea" que interese
/***error en validacion (html)***/
/**/
function checkMaxLength(){
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	if(currentLength > maxLength){
		this.value = this.value.substring(0, maxLength)
	}
		/*this.relatedElement.className = 'toomuch';
	else
		this.relatedElement.className = '';
	this.relatedElement.firstChild.nodeValue = currentLength;*/
	// not innerHTML
}
function setMaxLength(){
	var x = document.getElementsByTagName('textarea');
	var counter = document.createElement('div');
	counter.className = 'counter';
	for (var i=0;i<x.length;i++) {
		if(x[i].getAttribute('maxlength')){
			//var counterClone = counter.cloneNode(true);
			//counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			//x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			//x[i].relatedElement = counterClone.getElementsByTagName('span')[0];
			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();
		}
	}
}
window.onload = setMaxLength; //carga en inicio y ejecuta el codigo sobre todos los "textarea" en la pagina

//limpiar los elementos del formulario
function fLimpiaForm(idFormulario){
	var idForm = document.getElementById(idFormulario).elements;
	for(i=0;i<idForm.length;i++){
		switch(idForm[i].type){
			case 'text':
			case 'password':
			case 'textarea':
				idForm[i].value = '';
				break;
			case 'select-one':
				idForm[i].selectedIndex = 0;
				break;
			case 'checkbox':
				idForm[i].checked = false;
				break;
			default:
				//alert(idForm[i].type);
		}
	}
	return true;
}

//marca los campos con error
//"marca" a 1 es error, a 0 correcto
function fTagError(objId, marca){
	if(typeof objId == "string") objId = document.getElementById(objId);
	if(!marca) marca = 0;

	if(marca) objId.style.border = '1px solid red';
	else objId.style.border = document.getElementsByTagName(objId.parentNode.parentNode.tagName)[0].style.border;

	/*if(marca) objId.parentNode.style.color = 'red';
	else objId.parentNode.style.color = document.getElementsByTagName(objId.parentNode.parentNode.tagName)[0].style.color;*/
}

/*
 * corrige ancho de select en IE
 * 
 * obj -> objeto select
 * expandir -> bool, true expande select, false colapsa
 */
var nStartWidth = new Array();
function fCorrSelect(obj, expandir){
	if(!document.all) return true; //solo para IE

	//if(typeof nStartWidth != 'number') var nStartWidth = obj.offsetWidth;
	if(typeof nStartWidth[obj.name] != 'number') nStartWidth[obj.name] = obj.offsetWidth;
	var nEndWidth;

	if(expandir){
		var sDisplay = obj.parentNode.style.display.toLowerCase();

		//para no perder ancho y alto original
		var sTAnc = obj.parentNode.offsetWidth + 'px';
		var sTAlt = obj.parentNode.offsetHeight + 'px';

		//if(sDisplay == '' || sDisplay == 'inline' || sDisplay == 'inline-block'){
		if(sDisplay == '' || sDisplay == 'inline'){
			obj.parentNode.style.display = 'inline';
			obj.parentNode.style.width = sTAnc;
			obj.parentNode.style.height = sTAlt;
			//obj.parentNode.style.marginBottom = obj.style.marginBottom + 'px';
			obj.parentNode.style.position = 'relative';
			obj.style.position = 'absolute';
			obj.style.top = 0;
			obj.style.left = 0;
		}
		
		obj.style.width = 'auto';
		nEndWidth  = obj.offsetWidth;

		//si no es necesario expandir el ancho (comportamiento extraño en IE6 si descomentado)
		/*if(nEndWidth <= nStartWidth[obj.name]){
			//obj.style.width = nStartWidth[obj.name] + 'px';
		}*/
	}
	else{
		obj.style.width = nStartWidth[obj.name] + 'px';
	}
}

/*
validacion de campos password
*/
function valClave(objId, objId2){
	if(objId.value != '' || objId2.value != ''){
		if(objId.value == objId2.value){
			fTagError(objId, 0);
			fTagError(objId2, 0);
			return true; //pass valida
		}
		else {
			alert('Compruebe que ha escrito la misma clave en ambas casillas');
			fTagError(objId, 1);
			fTagError(objId2, 1);
			return false; //pass no valida
		}
	}

	fTagError(objId, 0);
	fTagError(objId2, 0);
	return true;
}

/*
validacion de campos e-mail
*/
function valEmail(objId){
	if(objId.value != '') {
		var filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if(filtro.test(objId.value)){
			fTagError(objId, 0);
			return true; //e-mail valido
		}
		else {
			alert('e-mail no válido');
			fTagError(objId, 1);
			return false; //e-mail no valido
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos de fechas
comprueba que una fecha introducida es valida y la convierte al formato aaaa-mm-dd hh:mm:ss; no distingue formato europeo de americano, puede dar errores en esa confusion
*/
function valFechas(objId, formato){
	if(!formato) formato = 'aaaa-mm-dd hh:mm:ss';

	if(objId.value != ''){
		var dFecha = objId.value.replace(/-/g, '/');
		var fechaInt = Date.parse(dFecha);
		if(!isNaN(fechaInt)){
			var fecha = new Date();
			fecha.setTime(fechaInt);
			if(fecha != 'Invalid Date'){
				//dFecha = (fecha.getFullYear() + '/' + (fecha.getMonth() + 1) + '/' + fecha.getDate() + ' ' + fecha.getHours() + ':' + fecha.getMinutes() + ':' + fecha.getSeconds());

				//comprueba que lo escrito por el usuario y la fecha valida encontrada sean la misma (javascript acepta fechas como '2008/02/55' convirtiendo el exceso de dias en meses), valido solo para fechas 'aaaa/mm/dd' //TODO aceptar formato de fecha y trabajar sobre el
				/*if(parseInt(objId.value.substr(0,4)) == parseInt(fecha.getFullYear()) && 
				parseInt(objId.value.substr(5,2)) == (parseInt(fecha.getMonth()) + 1) && 
				parseInt(objId.value.substr(8,2)) == parseInt(fecha.getDate()) && 
				(objId.value.substr(11,2) == '' || parseInt(objId.value.substr(11,2)) == parseInt(fecha.getHours())) && 
				(objId.value.substr(14,2) == '' || parseInt(objId.value.substr(14,2)) == parseInt(fecha.getMinutes())) &&  
				(objId.value.substr(17,2) == '' || parseInt(objId.value.substr(17,2)) == parseInt(fecha.getSeconds()))){*/
					fTagError(objId, 0);
					return true;
				/*}*/
			}
		}
		//fecha incorrecta
		fTagError(objId, 1);
		alert('Fecha incorrecta.\nFormato recomendado para las fechas: aaaa-mm-dd hh:mm:ss');
		return false;
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos fichero, comprueba la extension del archivo entre las permitidas
*/
function valFichero(objId, extensiones){
	if(objId.value != ''){
		var sTemp = '';
		var aTemp = new Array();
		aTemp = objId.value.split('.');
		sTemp = aTemp[aTemp.length - 1];

		if(extensiones.indexOf(sTemp.toLowerCase()) >= 0){
			fTagError(objId, 0);
			return true; //tipo de fichero correcto
		}
		else {
			alert('Tipo de fichero no permitido.');
			fTagError(objId, 1);
			return false; //tipo de fichero no permitido
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
validacion de campos NIF/NIE
 NIF sin espacios, 10 caracteres (NIE) maximo
*/
function valNif(objId){
	objId.value = objId.value.toUpperCase();

	//sale si el campo esta vacio
	if(objId.value == ''){
		fTagError(objId, 0);
		return true;
	}

	dni = objId.value.substr(0, objId.value.length-1); //NIF
	if(objId.value.charAt(0) == 'X') dni = dni.substr(1); //NIE

	letra = objId.value.charAt(objId.value.length-1);

	if(dni.length == 8 && isNaN(letra)){
		var control = 'TRWAGMYFPDXBNJZSQVHLCKE';
		pos = dni % 23;
		control = control.charAt(pos);
		if(control==letra){
			//nif correcto
			fTagError(objId, 0);
			return true;
		}
	}

	if(objId.value.charAt(0) == 'X') alert('NIE incorrecto'); //NIE
	else alert('NIF incorrecto'); //NIF
	fTagError(objId, 1);
	return false; //nif incorrecto
}

/*
validacion de numericos, con rango entre "menor" y "mayor" (opcionales ambos)
*/
function valNumeros(objId, menor, mayor){
	if(objId.value != ''){
		if(typeof menor == 'undefined')
			menor = 0;
		if(typeof mayor == 'undefined')
			mayor = Math.pow(10, objId.maxLength);
	
		num = parseInt(objId.value);
		if((num >= menor && num <= mayor) || objId.value == ''){
			fTagError(objId, 0);
			return true;
		}
		else{
			alert('Rango entre ' + menor + ' y ' + mayor);
			fTagError(objId, 1);
			return false;
		}
	}

	fTagError(objId, 0);
	return true;
}

/*
campo de caracter obligatorio, no puede tener valor nulo
se llama en el envio del formulario
#por hacer# verificar para checkbox
*/
function valObligatorio(objId, text){
	//cssValorObjeto('comunes.css', objId);
	if(objId.value != '') {
		fTagError(objId, 0);
		return true;
	}
	fTagError(objId, 1);
	alert('"' + text + '" no puede estar vac\u00EDo.');
	return false;
}

/*version para radio buttons*/
function valObligatorioRadio(objName, text){
    var cnt = -1;
    for(var i=objName.length-1; i > -1; i--){
        if(objName[i].checked){cnt = i; i = -1;}
    }
    if(cnt > -1){
		fTagError(objName[0].parentNode, 0);
    	return true;
    }
    else{
		fTagError(objName[0].parentNode, 1);
		alert('En "' + text + '" debe marcar alguna opci\u00F3n.');
    	return false;
    }
}

/*
fuerza la entrada de solo numeros y coma decimal
llamar con: onkeypress="return valTeclasFechas(event);"
*/
function valTeclasFechas(objEvent){
	var objId = objEvent.target || objEvent.srcElement; //obtiene el objeto que ha generado este evento
	var charCode;
	if(navigator.appName == "Netscape")
		charCode = objEvent.which;
	else charCode = objEvent.keyCode;
	//permite la entrada de numeros, espacio, dos puntos, barra y guion
	if(charCode > 31 && (charCode < 48 || charCode > 58) && charCode != 32 && charCode != 47 && charCode != 45)
		return false; //alert("No son caracteres de fecha")
	else{
		if(objId.value.indexOf(' ') != -1 && charCode == 32) return false;
		return true;
	}
}

/*
fuerza la entrada de solo numeros y coma decimal
llamar con: onkeypress="return valTeclasNumeros(event);"
o 'addEvent(\'objId\', "keypress", function (e){if(!valTeclasNumeros(e)) if(e.preventDefault){e.preventDefault();} else{event.returnValue = false;} });'
*/
function valTeclasNumeros(objEvent){
	var objId = objEvent.target || objEvent.srcElement; //obtiene el objeto que ha generado este evento

	var charCode;
	if(navigator.appName == "Netscape")
		charCode = objEvent.which;
	else charCode = objEvent.keyCode;
	//permite la entrada de numeros y punto decimal
	if(charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
		return false; //alert("no es un numero")
	else{
		if(objId.value.indexOf('.') != -1 && charCode == 46) return false;
		return true;
	}
}

/*
validacion de campos URL
*/
function valUrl(objId){
	if(objId.value != ''){
		var filtro = /(((ht|f)tp(s?):\/\/)|(www\.[^ [\]()\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ [\](),;"'<>\n\r\t]+)([^. [\](),;"'<>\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})/;
		if(filtro.test(objId.value)){
			fTagError(objId, 0);
			return true; //url valida
		}
		else{
			alert('URL no v\u00E1lida.\nFormato recomendado: "http://dominio.tld"');
			fTagError(objId, 1);
			return false; //url no valida
		}
	}

	fTagError(objId, 0);
	return true;
}

/*****************************************************************************/
/**********************************NO USADAS**********************************/
/*****************************************************************************/

/*
maxlength para textareas
llamar con: onkeypress="return tamMaxTextArea(this, 1000);"
function tamMaxTextArea(objId, maxlength){
	alert(objId.value.length);
	return (objId.value.length <= maxlength);
}
*/

/*
longitud maxima de un campo (input text, input password)
parametro "longitud" opcional
llamar con: onkeypress="return tamMax(this);"; si se llama a otra funcion en este evento, llamar a esta funcion desde esa funcion, no desde el evento
*/
function tamMax(objId, longitud){
	if(typeof longitud == 'undefined')
		objId.maxLength = 255;
	else
		objId.maxLength = longitud;

	return true;
}

/*version para checkbox*/
function valObligatorioCheck(objId, text){
	if(objId.checked){
		fTagError(objId, 0);
		return true;
	}
	fTagError(objId, 1);
	alert('"' + text + '" no puede estar vac\u00EDo.');
	return false;
}

/*
#por hacer#
busca el valor de un elemento html
*/
function cssValorObjeto(hojaCss, objId){
	var cssRules;
	if(document.all){
		cssRules = 'rules';
	}
	else if(document.getElementById){
		cssRules = 'cssRules';
	}
	for(var i = 0; i < document.styleSheets.length; i++){
		for(var j = 0; j < document.styleSheets[i][cssRules].length; j++){
			if(document.styleSheets[i].href.indexOf(hojaCss) != -1){
				var a = document.styleSheets[i][cssRules][j];
				var b = document.getElementsByTagName(objId.parentNode.tagName)[0];
				if(document.styleSheets[i][cssRules][j].selectorText == document.getElementsByTagName(objId.parentNode.tagName)[0]){
					alert(document.styleSheets[i][cssRules][j].style[element]);
				}
			}
		}
	}
	return false;
}

/*******************************
 Validación del CIF. Por Carlitos. carlosbernad@teleline.es
 Si usas este script, deja intactas estas líneas (créditos). Vale?
 También te agradecería un e-mail con tus comentarios.
*******************************/
function isValidCif(abc){
	par = 0;
	non = 0;
	letras = "ABCDEFGHKLMNPQS";
	let = abc.charAt(0);
 
	if(abc.length!=9){
		//alert('El Cif debe tener 9 dígitos');
		return false;
	}
 
	if(letras.indexOf(let.toUpperCase())==-1){
		//alert("El comienzo del Cif no es válido");
		return false;
	}
 
	for(zz=2;zz<8;zz+=2){
		par = par+parseInt(abc.charAt(zz));
	}
 
	for(zz=1;zz<9;zz+=2){
		nn = 2*parseInt(abc.charAt(zz));
		if(nn > 9) nn = 1+(nn-10);
			non = non+nn;
	}
 
	parcial = par + non;
	control = (10 - ( parcial % 10));
	if(control==10) control=0;
 
	if(control!=abc.charAt(8)){
		//alert("El Cif no es válido");
		return false;
	}
	//alert("El Cif es válido");
	return true;
}

 /*
  * controla la salida sin guardar
  * integrada en la clase (como anonima)
  */ 
 function _avisoSalida(e){
 	if(!window.bSinsalvar) return true;
 	var e = e || window.event;

 	// For IE and Firefox
 	if(e){
 		e.returnValue = 'Any string';
 	}

 	// For Safari
 	return 'Any string';
 };