Cita:
Iniciado por Killerx_8937
hola amigos.
les muestro un extracto de un fomualrio que tengo.
Código Javascript
:
Ver original<form name="FormGranIng" method="post" action="">
<table>
<tr>
<td>
<table id="TablaA">
<tr>
<td><input name="A[]" id="A" type="text" class="textbox" size="4" maxlength="10" onChange="valNum(this);" tabindex="6"></td>
</tr>
</table> </td>
<td>
<input type="button" class="button" value="+" onClick="agregarCelda('TablaA','A')">
</td>
</tr>
</table>
</form>
sobre este formulario estoy agregando celdas dinamicamente asi
Código Javascript
:
Ver originalfunction agregarCelda(idTabla,nombreCelda)
{
nuevaFila = document.getElementById(idTabla).rows[0];
nuevaCelda=nuevaFila.insertCell(-1);
nuevaCelda.innerHTML="<td><input name='"+nombreCelda+"[]' type='text' class='textbox' size='4' maxlength='10' onChange='valNum(this);'></td>";
}
Para validar el textbox le paso el objeto con el cual obtengo el value y el id para retornar el foco,
la funcion valNum es la siguiente
Código Javascript
:
Ver originalfunction valNum(numero)
{
if (!/^[0-9]*\.?[0-9]{1,2}$/.test(numero.value))
{
alert("El valor " + numero.value + " no es un numero o tiene mas de 2 decimales");
document.getElementById(numero.id).value="";
document.getElementById(numero.id).focus();
}
}
el problema es que como estoy generando celdas y inputs dinamicamente, no se me ocurre como generar el id de cada textbox para que en caso que la validacion no tenga exito retornarle el foco u poner el campo en blanco.
se entiende??
Acá tenés 2 situaciones, si en la llamada pasas el parámetro 'this', no necesitasel id, ya que te estás refiriendo al propio elemento, por otro lado, poner un focus() tras un onchange, es bastante problemático, ya que necesita necesariamente de un onblur para dicho campo, podés corregirlo con esto, adicionalmente hacemos las dos cosas, fijamos el foco y ponemos en blanco el campo
Código:
<!DOCTYPE html>
<html lang="es-ar">
<head>
<meta charset="utf-8" />
<title>Html5</title>
<script type="text/javascript">
//<![CDATA[
function valida(elemento){
if(!/^[0-9]*\.?[0-9]{1,2}$/.test(elemento.value)){
alert('error');
elemento.value = "";
setTimeout(function(){elemento.focus();},50); // para conseguir el foco tras onchange le dás una pequeña demora
}
}
//]]>
</script>
</head>
<body>
<form action="#">
<input type="text" value="" name="a" onchange="valida(this);" /><br />
<input type="text" value="" name="b" onchange="valida(this);" /><br />
</form>
</body>
</html>
Saludos