PHP Classes

File: class.formulario.js

Recommend this page to a friend!
  Classes of José M. 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: 14 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'; };