Foros del Web » Programando para Internet » Javascript »

recargar parte de un script (con codigo=)

Estas en el tema de recargar parte de un script (con codigo=) en el foro de Javascript en Foros del Web. Saludos. Estoy empezando esto del javascript y tengo un problema. Se me encargo modificar un script el que consiste en sumar unos precios que llegan ...
  #1 (permalink)  
Antiguo 10/09/2007, 13:11
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
recargar parte de un script (con codigo=)

Saludos.

Estoy empezando esto del javascript y tengo un problema.

Se me encargo modificar un script el que consiste en sumar unos precios que llegan de forma dinámica por php. Pero cuando cambio algo del dropdown numero 1, afecta al dropdown numero 2.

Hasta acá todo bien.

El problema surje cuando el usuario vuelve a modificar su seleccino en el primer dropdown, el script pareciera no funcionar.

La unica forma que puedo "resetearlo" es cambiar el dropdown 2, y volverlo a su forma anterior.

Alguna idea de que puedo cambiar para que funcione ya sea modificando el campo 1 y luego el dos, y viceversa??

Mi trabajo depende de esto... y soy un noob :(

Última edición por SCY-FOX; 11/09/2007 a las 08:05 Razón: faltó poner el codigo fuente :)
  #2 (permalink)  
Antiguo 11/09/2007, 06:57
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: recargar parte de un script

Yo que tú pondría el código del script. No me hago idea de lo que te ocurre ni de lo que necesitas.
Si lo tienes publicado puedes poner un enlace a la página...
__________________
Kelpie
  #3 (permalink)  
Antiguo 11/09/2007, 07:30
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script

Okey.

Sucede que tengo 2 dropdowns y 3 campos que se autocompletan de forma dinámica, según lo que yo elija en los dropdowns.

uno es el precio (a), otro es mi cantidad de dinero (b), y el ultimo y mas importante la cantidad de items que puedo comprar con mi dinero (b/a)

Ahora, el drop1 se carga usando un script.
Código:
function setValuesForCountry(country3,leyenda,destino,acc,valor,div) 
	{
		
 var cadena = new String(country3);
 var aux = cadena.split("/"); 	 



   if($F(destino)!=-1)
   {
	   	  var factor =parseFloat(replace(aux[1],',','.'));
		  var tarifa = new String($F(destino));
          var mitad = tarifa.split("$");
	      var tarifa2 =parseFloat(replace(mitad [1],',','.')); 
		 
		
		 if(!isNaN(factor))
		 {
		   
		 // alert(tarifa2+"/"+factor); 
		 // monto=(tarifa2*factor).toFixed(4);
          suma=parseFloat (tarifa2)+ parseFloat (factor);
          valorcito=suma.toFixed(3);
		   document.getElementById(valor).value="";
		    if(isNaN(valorcito))
			document.getElementById(valor).value="US$ FREE";
			else
			{
			 document.getElementById(valor).value="US$"+valorcito;
			if(leyenda=="es")
			$(div).innerHTML="<font style=\"font-size:10px; color:#000000;\">* Esta tarifa ya considera"+ factor +"/min.</font>";			
		}
		 }
		 else
		 {
		   
		   if(isNaN(tarifa2))
		   {
		     document.getElementById(valor).value="FREE";
		   }
		   else
		   {
		   document.getElementById(valor).value="";
		   document.getElementById(valor).value=+tarifa2;
		   $(div).innerHTML="";
		   }
		 } 
      }

document.getElementById(acc).value="";
document.getElementById(acc).value=aux[0];	

	}
	

	function setValuesForCountry3(country3,leyenda,origen,valorr,div) 
	{
	  
	  
	    var tarifa = new String(country3);
	    //se puede crear en una linea.
        var tarifa2 = tarifa.split("$");
        var valor = replace(tarifa2[1],',','.');
		factor = new String ($F(origen));
        mitad=factor.split("/");
        aux=mitad[1];
        aux=parseFloat(aux);
		
		
		//alert(aux+"/"+valor+"/"+country3);
		if(!isNaN(aux) && !isNaN(valor))
		{
			
		  // alert(valor+"/"+aux);
	       // monto=(valor*aux).toFixed(4);
	        suma=parseFloat (valor)+ parseFloat (aux);
	        valor=suma.toFixed(4);
	        country3=valor;
		    document.getElementById(valorr).value="";
		    document.getElementById(valorr).value="US$"+country3	
		}	
		else
		{
		  
		    //document.getElementById(valorr).value="";
		   document.getElementById(valorr).value="US$"+valor;
		   $(div).innerHTML="";
		
		 
		}
		
	}
(algunas cosas las saque por ser php y de mi bd :)

y el drop 2 tiene este codigo

Código:
function setValuesForMinutos(country3)
{

var tarifa = new String(country3);

	//se puede crear en una linea.
var tarifa2 = tarifa.split("$");
//rescato el factor de la tabla
factor = new String ($F('select'));
mitad=factor.split("/");
aux=mitad[1];
aux=parseFloat(aux);


	
 if($F('select')!=-1 && isNaN ($F('select')) && !isNaN(aux))
 {
	
	
    var valorcito = replace(tarifa2[1],',','.');
	aux2=valorcito;
	monto=(aux2*aux).toFixed(4);
	suma=parseFloat (valorcito)+ parseFloat (monto);
	valorcito=suma.toFixed(3);
	country3=valorcito
	
	
	
	
	
	 
 }
 else
	{
	  var tarifa = new String(country3);
	  //se puede crear en una linea.
      var tarifa2 = tarifa.split("$");
	  var valorcito = replace(tarifa2[1],',','.');
      country3=parseFloat (valorcito).toFixed(3);
	
	
	}

	var saldo = document.buy.total2.value;
	
	if(tarifa2[1] == 0)
	{
		document.buy.minutos.value = "";
		document.buy.rate3.value = "";
	}
	else
	{
		if(saldo == 0)
		{
			
			var total_compra= document.buy.total2.value;	
			document.buy.minutos.value = (total_compra/valorcito).toFixed(0);
		}
		else
		{
            
			minutitos = saldo/valorcito;
			document.buy.minutos.value = minutitos.toFixed(0);
		}
		
		document.buy.rate3.value = +country3;
	}

  }
}
Ahora desde la web, llaman al script asi.

Código:
<table width="100%" border="0" cellpadding="5" cellspacing="0" >
                    <tr>
                      <td width="254" align="left" class="textos_chicos"> <br>Desde donde llamas <br>
                          <select name="select_orig" class="input_sb" id="select" onChange="setValuesForCountry(this.options[this.selectedIndex].value,'es','select2','aphone','rate3','mensa')">
                            <option value="" selected>seleccione...</option>
                            <? echo $select_or; ?>
                        </select><br>
                        <div id="mensa" style="position:absolute; left: 38px; width:400px"></div>
                        <br>
                        </td>
                    </tr>
                    <tr>
                      <td align="left" class="textos_chicos">Marca n&uacute;mero de Acceso<br>
                          <input name="aphone" type="text" class="input_sb" id="aphone" size="18" maxlength="20" readonly="true"><br>
                          
                          
                          </td>
                    </tr>
                   
                </table></td>
              </tr>
            </table></td>
          </tr>
        <tr>
          <td align="left" class="textos">&nbsp;</td>
          <td align="left" class="textos"><table width="83%" border="0" cellpadding="6" cellspacing="0" >
              <tr>
                <td width="170" align="left" class="textos_chicos">Tarifas/min<br>
                    <select  name="select_dest" class="input_sb" id="select2" onChange="setValuesForMinutos(this.options[this.selectedIndex].value);" >
                      <option value="-1" selected>seleccione... </option>
                      <? echo $select_rates; ?>
                  </select>
                  
                  </td>
                <td width="81" align="center" valign="bottom" class="textos"><input name="rate3"  type="text" class="input_sb" id="rate3" size="10" maxlength="10" readonly="true"></td>
                <td width="42" align="left" class="textos_chicos">US$/Min </td>
              </tr>
              <tr>
                <td align="right" valign="middle" class="textos_chicos">Con tu saldo puedes llamar </td>
                <td align="center" valign="middle" class="textos"><input type="hidden" name="saldo" id="saldo" value="<? echo  $credit;?>">
                    <input name="minutos" type="text" class="input_sb" id="rate32" size="10" maxlength="10" readonly="true"></td>
                <td align="left" class="textos_chicos">Mins</td>
              </tr>
          </table>
El problema es que este código lo hizo otra persona y no dejo nada documentado, opr lo que me es dificil tratar de seguirlo y más todavia de modificarlo.
El codigo funciona muy bien si usas la primera seleccion (drop1) y luego la segunda(drop2) lo que te arroja el resultado (rate32).

Pero si vuelvo a cambiar drop1, el resultado no cambia más y estoy obligado a cambiar drop2 por otro valor para que ejecute el script.

Mi necesidad es que funcione ya sea cambiando drop1 y drop2 o al revés.

Habia pensado en meter todo en un solo script y que lo ejecute con un botón. Pero no se si me dejarán meter un boton en algo que ya era dinámico...

Espero sus comentarios
  #4 (permalink)  
Antiguo 12/09/2007, 10:44
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script (con codigo=)

Bueno, como me pescaron poco, acá pongo como lo saqué...

Ahora recibo las variables del dropdown, pero no entiendo porque el ALERT(MONTO) no sale... el otro alert funciona sin problemas..

Alguna ayudita???
Código:
<?php
$credito = $_GET['credito'];


?>
<html>
 <head>
  <script language="JavaScript">
   function cambia(){ //funcion que compara valores cruzados segun numero acceso c/s toll y numero destino
    with (document.frm){ //importa variables desde formulario anterior, (necesario para capturar 2 dropdowns dinámicos.

     indice.value = String(select_orig.selectedIndex); //prueba de recepcion de indice
     opcion.value = select_orig.options[select_orig.selectedIndex].text; //prueba de recepción de nombre de campo
     valor.value = select_orig.options[select_orig.selectedIndex].value; //prueba de recepción de valor de campo
	
     indice2.value = String(select_dest.selectedIndex); //prueba de recepcion de indice
     opcion2.value = select_dest.options[select_dest.selectedIndex].text; //prueba de recepción de nombre de campo
     valor2.value = select_dest.options[select_dest.selectedIndex].value; //prueba de recepción de valor de campo
		
	var cadena = new String(valor.value); //recibe numero acceso y factor del número de acceso
	var mediacadena = cadena.split("/"); // corta la cadena anterior, reemplaza el '/' con una coma. ','

	var tarifa = valor2.value; //recibe valor de cobro de este tipo de llamada. formato US$nbsp;0,35000
	var tarifa2 = tarifa.split("$"); //divide la cadena anterior en subcadenas, reemplaza el '$' con una coma ','
	var factor_aux = new String(valor.value);
	var mitad_acceso = factor_aux.split("/");
	var factor = mitad_acceso[1];
		factor = parseFloat(factor);
		
	if ((valor.value!=-1) && isNaN(valor.value) && !isNaN(factor))
	{
		alert("entra la wea");
		var valorcito = replace(tarifa2[1],',','.');
		var temp2 = valorcito;
		monto = (temp2*factor).toFixed(4);
		alert(monto);
		suma = parseFloat(valorcito) + parseFloat(monto);
		valorcito = suma.toFixed(3);
		origen = valorcito;			
	}
	else 
		{
		var tarifa = new String(valor.value);
		var tarifa2 = tarifa.split("$");
		var valorcito = replace(tarifa2[1],',','.');
		origen = parseFloat(valorcito).toFixed(3);
		}

	document.frm.test2.value = factor;
	document.frm.test3.value = tarifa2;		

	var preciofinal=taux1+taux2;
	
	document.frm.resultado.value="";
	document.frm.resultado.value=preciofinal;
	
//if(precio1!="-1") AND (precio2!="-1")
	//{
	//alert(preciofinal);
//	document.frm.resultado.value=preciofinal;
//	document.write(preciofinal);
//	}
    }
   }
  </script>
 </head>
 <body>
  <form name="frm">
    <p>Indice:
   <input type="text" name="indice"><br>
   Opcion:
   <input type="text" name="opcion"><br>
   Valor: 
   <input type="text" name="valor"><br>

   Indice:
   <input type="text" name="indice2"><br>
   Opcion:
   <input type="text" name="opcion2"><br>
   Valor: 
   <input type="text" name="valor2"><br>

   	Seleccione Origen:
   	<select name="select_orig" class="input_sb" id="select" onChange="cambia();">
   	  <option value="-1">Seleccione ciudad Origen</option>
   	  <option value="800 3453200/0.160   ">ARGENTINA - *</option>
   	  <option value="5239 1327/   ">ARGENTINA - BUENOS AIRES</option>
 	  </select>
   	</p>
    <p>Seleccione Destino:
   	  <select name="select_dest" onChange="cambia()">
   	  <option value="-1">Seleccione Ciudad Destino</option>
   	  <option value="US$&nbsp;0,35000">Afghanistan</option>
   	  <option value="US$&nbsp;0,47000">Afghanistan tanks</option>
 	  </select>
	  </p>
    <p>US$ Disponibles <input type="text" name="credito" readonly value="<? echo $credito;?>"></input>
    </p>
   <p>Variables intermedias para ver si ocurren cambios
      <input name="test1" type="text" value="" size="30" readonly>
      </input>
          </p>
      <p>Variables intermedias para ver si ocurren cambios
      <input name="test2" type="text" value="" size="30" readonly>
      </input>
          </p>
             <p>Variables intermedias para ver si ocurren cambios
      <input name="test3" type="text" value="" size="30" readonly>
      </input>
          </p>
     <p>Minutos Disponibles
      <input name="resultado" type="text" value="" size="30" readonly>
      </input>
          </p>
 </form>
 </body>
</html>
  #5 (permalink)  
Antiguo 20/09/2007, 14:06
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script (con codigo=)

upppppppppppp
  #6 (permalink)  
Antiguo 21/09/2007, 10:22
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script (con codigo=)

toing UP

ya se que esto no se hace, pero tengo avances y me falta solo una pequeña cosa para terminar de validar todo y me revienta la cabeza...

Bueno, a consejo de un compañero de pega, le meti harto alert() pa cachar donde cresta se cae el asunto y llegue a lo siguiente:

Código:
var tarifa = new String(select_dest.value); //recibe valor de cobro de este tipo de llamada. formato US$nbsp;0,35000
    var tarifa2 = tarifa.split("$ "); //divide la cadena anterior en subcadenas, reemplaza el '$' con una coma ','
    alert(tarifa2);
    alert(tarifa2[1]);
    var destino = replace(tarifa2[1],',','.');
    alert(destino);
Lo malisimo de este codigo es que desde la BD me llega el valor prueba con un espacio entremedio.
US$nbsp;0,35000

El debug de los alert es algo asi.

US$nbsp;0,35000
undefined
Object HTMLFormElement
element.ParentNode has no parameters
y ahi caga la pagina.

Al parecer no me esta parseando sin el espacio al medio, por lo que se manea a cagar con eso al medio. Lei hartos foros en donde no recomendaban usar espacios en javascript, pero lamentablemente acá estoy cagado porque como dije antes, asi llega desde la base de datos.

Traté de darle un manejo con esto
Código:
var tarifa2 = tarifa.split("$ ");
Pero solo corre en una pagina por separado. Si la pego al resto me sale el error que comento al inicio. Me avisa de error en una linea de la libreria prototype.
  #7 (permalink)  
Antiguo 24/09/2007, 06:52
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script (con codigo=)

ideal que alguien me pesque... que me rete por el up o que derechamente me digan que no tienen idea pa no perder más tiempo acá y partir a otros foros...

chau.
  #8 (permalink)  
Antiguo 24/09/2007, 07:42
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: recargar parte de un script (con codigo=)

creo que podrias mejorar el script para cambiar lo que seleccionas del primero al regundo select o combo

checa esta liga de este estupendo foro

http://www.forosdelweb.com/f13/faqs-...25/#post259655

saludos
__________________
gerardo
  #9 (permalink)  
Antiguo 24/09/2007, 07:50
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: recargar parte de un script (con codigo=)

aqui una version mejorada

<html>
<head>
<title>
FAQ-1: Selects
</title>
<script language="JavaScript">

function addOpt(oCntrl, iPos, sTxt, sVal)
{
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[iPos]=selOpcion);
}

function cambia(oCntrl)
{
while (oCntrl.length) oCntrl.remove(0);
switch (document.frm.pais.selectedIndex){
case 1:
addOpt(oCntrl, 0, "Ciudad de México", "0");
addOpt(oCntrl, 1, "Monterrey", "1");
addOpt(oCntrl, 2, "Guadalajara", "2");
break;
case 2:
addOpt(oCntrl, 0, "Madrid", "0");
addOpt(oCntrl, 1, "Barcelona", "1");
addOpt(oCntrl, 2, "San Sebastián", "2");
break;
case 3:
addOpt(oCntrl, 0, "Caracas", "0");
addOpt(oCntrl, 1, "Coro", "1");
addOpt(oCntrl, 2, "Maracay", "2");
addOpt(oCntrl, 3, "Valencia", "3");
break;
}
}
</script>
</head>
<body>
<script language="JavaScript">
var w = 400;
var h = 150;
resizeTo(w, h);
moveTo((screen.width - w)/ 2, (screen.height - h)/ 2);
</script>
<form name="frm">
<table border="0">
<tr>
<td>
Pais
</td>
<td>
<select name="pais" onchange="cambia(document.frm.ciudad)">
<option value=""></option>
<option value="Mex">Mexico</option>
<option value="Esp">España</option>
<option value="Ven">Venezuela</option>
</select>
</td>
<td>
&nbsp;
</td>
<td>
Ciudad
</td>
<td>
<select name="ciudad">
<option value=""></option>
<option value="0">Ciudad de México</option>
<option value="1">Monterrey</option>
<option value="2">Guadalajara</option>
</select>
</td>
</tr>
</table>
</form>
</body>
</html>
__________________
gerardo
  #10 (permalink)  
Antiguo 24/09/2007, 07:52
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: recargar parte de un script (con codigo=)

incluso se podria aun mejorar esto de los combos usando ajax
pero hechale un vistazo y los comentamos con todo los amigos

saludos
__________________
gerardo
  #11 (permalink)  
Antiguo 26/09/2007, 14:21
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: recargar parte de un script (con codigo=)

Cita:
Iniciado por chalchis Ver Mensaje
incluso se podria aun mejorar esto de los combos usando ajax
pero hechale un vistazo y los comentamos con todo los amigos

saludos
wenas..

gracias por responder... ya pense que me estaba quedando solo en esto...

Voy a probar lo que dices y aviso que paso...


SIlla!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:33.