Comunidad de diseño web y desarrollo en internet online

Problema de comparacion en JavaScript

Citar            
MensajeEscrito el 02 Ene 2007 09:18 pm
Hola, tengo un problema muy raro con el "if" de javascript, resulta que traigo 2 elementos por medio del document.getElementById(); y se los asigno a 2 variables para despues compararlas, y la comparacion va bien hasta que derepente me truena y ya no hace la comparacion, por ejemplo uno de los datos es 7 y el otro va incrementando de 7 en adelante y la comparacion con 7, 8 y 9 va bien pero cuando llega al 10 y la comparacion es 10>7, ya no funciona.

La mayoria de las veces funciona bien sin ningun problema, pero aveces solo deja de funcionar, es demaciado raro no?,.

Espero me puedan ayudar a ver que el lo que pasa porque hace eso, aqui les dejo el codigo.

funcion JavaScript:

function eliminaInput(elemento)
{
n_campos = document.getElementById("campos_"+elemento).value;
n_campos2 = document.getElementById("campos2_"+elemento).value
//alert("#de c/datos"+document.getElementById("campos2_"+elemento).value+" #de c/totales"+ n_campos);
//este es el if del problema, el que truena.
if(n_campos > n_campos2){
n_campos--;
var fila=document.getElementById("campo_"+n_campos);
fila.innerHTML="";
document.getElementById("campos_"+elemento).value = n_campos;
}
}
Este es el boton que llama a la funcion:

echo"<input type=\"button\" value=\"-\" name=\"Quitar Campo\" class=\"button\" onclick=\"eliminaInput('$id')\" />";

Los elementos que mando llamar los imprimo con PHP, ya que vienen de la base de datos:

echo "<input name=\"campos_$id\" type=\"hidden\" id=\"campos_$id\" value=\"$campos\">";
echo "<input name=\"campos2_$id\" type=\"hidden\" id=\"campos2_$id\" value=\"$campos\">";

Por sensukho

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Ene 2007 09:05 pm
Hola soy yo de nuevo, ya logre resolver mi problema despues de kebrarme la cabeza por un rato y llegue a la conclucion que al jalar los datos con el document.getElementById("campos_"+elemento).value y asignarselo a las variables de javascript, puede que este no las reconozca esos datos como enteros sino como caracteres solamente, entonces, no se se me ocurrio que para que el javascript las reconociera como enteros incremente y decremente las variables en 1 en el mismo renglon antes de hacer la comparacion y de esa manera ya realiza la comparacion correcta, no se si alguien mas se alla topado con este mismo problema que es como ya habia dicho raro, poro si alguien se atora como yo, pues aqui esta una pocible solucion (no creo que la unica) ok!

El codigo quedo asi:

unction eliminaInput(elemento)
{
n_campos = document.getElementById("campos_"+elemento).value;
n_campos2 = document.getElementById("campos2_"+elemento).value
//alert("#de c/datos"+document.getElementById("campos2_"+elemento).value+" #de c/totales"+ n_campos);
//incremento y decremento antes del if.
n_campos++; n_campos--;
n_campos2++; n_campos2--;
if(n_campos > n_campos2){
n_campos--;
var fila=document.getElementById("campo_"+n_campos);
fila.innerHTML="";
document.getElementById("campos_"+elemento).value = n_campos;
}
}

Por sensukho

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Ene 2007 09:26 pm
para poder ayudarte mejor, utiliza las etiquetas CODE cuando pongas código

un saludo

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 03 Ene 2007 09:49 pm
Esa no es una buena manera de hacerlo. Deberías de hacerle un casting:

Código :

n_campos = Number(document.getElementById("campos_"+elemento).value);
n_campos2 = Number(document.getElementById("campos2_"+elemento).value);

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 03 Ene 2007 10:03 pm
Muy buena recomendación Cep; además yo siempre valido que el objeto exista.


Código :

var obj1 = document.getElementById("campos_"+elemento);
var obj2 = document.getElementById("campos2_"+elemento);
if(obj1)
{
  n_campos = Number(obj1.value);
}
if(obj2)
{
  n_campos2 = Number(obj2.value);
}

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 04 Ene 2007 12:17 am
Yup, lo mejor es validarlo, además uno siempre puede crear una función si es que son muchos elementos.

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

firefox
Citar            
MensajeEscrito el 10 Ene 2007 07:01 pm
Wow, gracias Cep si tienes razon es mucho mejor pero no sabia como hacerlo, te agradezco tu respuesta. y tambien como dice Dano es buena idea validar.

Gracias

Por sensukho

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.