/*****************************************************************************/
/*************************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';
};
|