Javascript que no ejecuta bien la función

Hola a todos.

Quería hacer una consulta a ver si alguien me puede echar una mano. He de decir que de Javascript no he visto nada en el foro...

La cuestión es que tengo una página en PHP con trozos de Javascript que funcionan bien.

Sin embargo, estoy con una cosa que me tiene bastante mártir y tiene que ser alguna tontería, pero no veo el fallo.

Estoy con una función de validación de DNI y funciona correctamente, pero quiero hacer la validación todavía mejor y que al pulsar el botón, no se ejecute nada si el DNI es incorrecto.

La función la tengo en un .js aparte, que se llama dni.js

Esto es lo que contiene:

function nif(eldni) {
var letra = "";
letra = eldni.substr(0,1);
if ((letra == "X") || (letra == "Y") || (letra == "Z"))
{
switch (letra)
{
case "X": eldni = eldni.replace("X","0");
break;
case "Y": eldni = eldni.replace("Y","1");
break;
case "Z": eldni = eldni.replace("Z","2");
break;
}

calcula(eldni);
}
else
{
calcula(eldni);
}
}

function calcula(eldni)
{
numero = eldni.substr(0,eldni.length-1);
let = eldni.substr(eldni.length-1,1);
numero = numero % 23;
letra='TRWAGMYFPDXBNJZSQVHLCKET';
letra=letra.substring(numero,numero+1);
if (letra!=let.toUpperCase())
{
jAlert( 'DNI/NIE Incorrecto','AVISO: _Intranet',0);
x=0;
return x;
}
else
{
return 1;
}
}


La función como digo, funciona correctamente y hace la validación bien.

En la página PHP, es donde tengo el fallo que ahora lo señalo (no pongo todo, pero sí lo importante):

<?php include('cabecera.php');
if ($_SESSION['et']== 0 || $_SESSION['et']==null)
{ ?>
<br /><br /><br /><br /><br />
<div align="center" style="width: 50%; margin-left: 9%">
<br /><br /><br />
<font style="font-size: 15px; background: #CC0033" class="" color="#FFFFFF"> &nbsp;&nbsp; UD. no dispone de privilegios para acceder a este módulo. &nbsp;&nbsp; </font>
<br /><br /><br /><br />
</div>
<?php
session_destroy();
pg_close($c);
include('pie.php');
//return to login
echo "<script type='text/javascript'>
function redireccionar()
{window.location='login.php';}
setTimeout ('redireccionar()', 5000); //tiempo expresado en milisegundos
</script>";
exit;
}
?>


<script type="text/javascript" src="js/dni.js"></script>
<script type="text/javascript" src="js/AjaxCode.js"></script>
<script type="text/javascript" src="js/situ_existeDni.js" ></script>
<script type="text/javascript" src="js/enviaSitu.js" ></script>

<script language="javascript">
function settransi2()
{
var dni = document.situtras.dniST.value; -> Esto sí lo ejecuta correctamente.
alert(nif(document.situtras.dniST.value)); Al llamar a la función, no hace NADA
}

...

<div style="float: left">
<font size="2" face="Tahoma" color="#FF002A">*</font>
<font class="frmEtiquetaCampo1">DNI/NIE/NIF:&nbsp;</font>
<input id="dniST" name="dniST" type="text" size="12" font style= "text-transform: uppercase" class="borde1SolidoApl1" maxlength="9" onblur="nif(document.getElementById('dniST').value)" />Aquí sí va al .js y hace la validación correctamente
<input class="boton" type="button" value="&nbsp;Consultar&nbsp;" name="Consultar" onclick="settransi2(); "/>Esta es la función que está más arriba
</div>
<!--***********div oculto que mostrará una imagen para efecto de transición ****************** -->
<div id="loading" name="loading" style="visibility: hidden; float: left;">
<img src="images/loading.gif">
</div>
...


Lo señalado con negrita es la clave. El Alert, al intentar ejecutar la función que está en dni.js, no hace nada. Y claro, el objeto me sale como "undefined". No me devuelve ni un 0 (que es un error) o un 1 (que es correcto).

¿Se os ocurre alguna idea?

Muchas gracias y un saludo.
El nombre del forumario es "situtras"? Lo comento porque no se ve en el código.

document.nombre_formulario.name_del_campo.value

Si en vez de coger el DNI del formulario le pones tu el DNI manualmente a una variable y se la pasas en ese alert, te funciona?
OL3GU3R- escribió:El nombre del forumario es "situtras"? Lo comento porque no se ve en el código.

document.nombre_formulario.name_del_campo.value

Si en vez de coger el DNI del formulario le pones tu el DNI manualmente a una variable y se la pasas en ese alert, te funciona?


Si le pongo nombre de variable sí funciona.

Pero si llamo a la función en el .js en el trozo en negrita (que es el del alert) no. No llama a la función ni hace nada.

En cambio en el botón, en el evento Onclick sí funciona, lo malo es que si hago un if-else/switch/operadores ternarios...cumple la condición del if, del else...por mucho return que ponga. No se para la ejecución. Y aparte queda bastante "guarro".

Tipo:

if condición
return -> no para ejecución
else
aquí sí lo ejecuta y no debería.

Edito: He encontrado el fallo, pero no lo entiendo.

La funcion dni.js, la hace correctamente...pero en el momento que devuelve el valor, la página principal sale que está el valor "undefined". Debería devolver el valor ¿no? :-? :-? :-? .

Vale, he visto el problema. Era una gilipollez. No devolvía la función nada [+risas] [+risas] [+risas] . En fin, estupideces que a veces no se ven...ya está arreglado y funciona.

Saludos.
2 respuestas