Foros del Web » Programando para Internet » Javascript »

acortar script

Estas en el tema de acortar script en el foro de Javascript en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function calcula ( dat1 , dat2 ) {             var ope = dat1. ...
  #1 (permalink)  
Antiguo 16/11/2011, 10:59
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
acortar script

Código Javascript:
Ver original
  1. function calcula(dat1, dat2){
  2.             var ope = dat1.options[dat1.selectedIndex].value
  3.             document.form1.dat2.value = ope;
  4.             document.form1.p+dat2.disabled=this.value!='';
  5.             }

y la llamada la hago:

Código HTML:
Ver original
  1. onchange="calcula(this.options.selectedIndex,'des')"

no me funciona alguna idea???
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #2 (permalink)  
Antiguo 16/11/2011, 11:41
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: acortar script

Probá en el código javascript usar dat1 en vez de dat1.selectedIndex cuando seteas la variable ope.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 16/11/2011, 12:24
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
Respuesta: acortar script

bueno si he logrado hacerlo funcionar pero tengo otro inconveniente es que el script es repetitivo y quería ver si se puede acortar a una sola función:

Código Javascript:
Ver original
  1. function calcula1(data){
  2.         var pfrs= data.options[data.selectedIndex].value;
  3.         document.form1.frs.value = pfrs;
  4.         document.form1.pfrs.disabled=this.value!='';
  5.     }
  6.     function calcula2(data){
  7.         var pdes= data.options[data.selectedIndex].value;
  8.         document.form1.des.value = pdes;
  9.         document.form1.pdes.disabled=this.value!='';
  10.     }
  11.     function calcula3(data){
  12.         var psab= data.options[data.selectedIndex].value;
  13.         document.form1.sab.value = psab;
  14.         document.form1.psab.disabled=this.value!='';
  15.     }
  16.     var global= new Array(0, 0, 0, 0, 0);
  17.     function statpoint(elemSelect, indiceArray){
  18.         var pointset= parseInt(elemSelect.options[elemSelect.selectedIndex].text);
  19.         var datpast= global[indiceArray];
  20.         var atrset= document.getElementById("atr");
  21.         var atrpoint= parseInt(atrset.value);
  22.         atrpoint=atrpoint-datpast;
  23.         atrset.value=atrpoint+pointset;
  24.         global[indiceArray]=pointset;
  25.     }

Código HTML:
Ver original
  1. <select title="Selecciona los puntos de fuerza - ALERTA (ESTA OPCION SE BLOQUEARA)" id="pfrs" name="pfrs" size="1" onchange="calcula1(this);statpoint(this, 0)">
  2.     <option value="10" selected="selected">0</option>
  3.     <option value="11">10</option>
  4.     <option value="12">20</option>
  5.     <option value="13">30</option>
  6.     <option value="14">45</option>
  7.     <option value="15">60</option>
  8.     <option value="16">80</option>
  9.     <option value="17">100</option>
  10.     <option value="18">125</option>
  11.     <option value="19">150</option>
  12.     <option value="20">200</option>
  13. <input type="text" name="frs" id="frs" value="10" maxlength="3" size="4" readonly="readonly"/>
  14. <select title="Selecciona los puntos de destreza - ALERTA (ESTA OPCION SE BLOQUEARA)" id="pdes" name="pdes" size="1" onchange="calcula2(this);statpoint(this, 1)">
  15.     <option value="10" selected="selected">0</option>
  16.     <option value="11">10</option>
  17.     <option value="12">20</option>
  18.     <option value="13">30</option>
  19.     <option value="14">45</option>
  20.     <option value="15">60</option>
  21.     <option value="16">80</option>
  22.     <option value="17">100</option>
  23.     <option value="18">125</option>
  24.     <option value="19">150</option>
  25.     <option value="20">200</option>
  26. <input type="text" name="des" id="des" value="10" maxlength="3" size="4" readonly="readonly"/>
  27. <select title="Selecciona los puntos de saber - ALERTA (ESTA OPCION SE BLOQUEARA)" id="psab" name="psab" size="1" onchange="calcula3(this);statpoint(this, 2)">
  28. <option value="10" selected="selected">0</option>
  29.     <option value="11">10</option>
  30.     <option value="12">20</option>
  31.     <option value="13">30</option>
  32.     <option value="14">45</option>
  33.     <option value="15">60</option>
  34.     <option value="16">80</option>
  35.     <option value="17">100</option>
  36.     <option value="18">125</option>
  37.     <option value="19">150</option>
  38.     <option value="20">200</option>
  39. <input type="text" name="sab" id="sab" value="10" maxlength="3" size="4" readonly="readonly"/>
  40. <input name="atr" id="atr" value="0" readonly="readonly" />
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 16/11/2011, 12:38
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
Respuesta: acortar script

he logrado convertir el script en una sola llamada a funcion pero no logro simplificarlo creo que 1 llamada a funcion para cada elemento es mucho.

Código Javascript:
Ver original
  1. var global= new Array(0, 0, 0, 0, 0);
  2.        
  3.         function calcula1(data, elemSelect, indiceArray){
  4.             var pfrs= data.options[data.selectedIndex].value;
  5.             document.form1.frs.value = pfrs;
  6.             var pointset= parseInt(elemSelect.options[elemSelect.selectedIndex].text);
  7.             var datpast= global[indiceArray];
  8.             var atrset= document.getElementById("atr");
  9.             var atrpoint= parseInt(atrset.value);
  10.             atrpoint=atrpoint-datpast;
  11.             atrset.value=atrpoint+pointset;
  12.             global[indiceArray]=pointset;
  13.             document.form1.pdes.disabled=this.value!='';
  14.             }
  15.         function calcula2(data, elemSelect, indiceArray){
  16.             var pdes= data.options[data.selectedIndex].value;
  17.             document.form1.des.value = pdes;
  18.             var pointset= parseInt(elemSelect.options[elemSelect.selectedIndex].text);
  19.             var datpast= global[indiceArray];
  20.             var atrset= document.getElementById("atr");
  21.             var atrpoint= parseInt(atrset.value);
  22.             atrpoint=atrpoint-datpast;
  23.             atrset.value=atrpoint+pointset;
  24.             global[indiceArray]=pointset;
  25.             document.form1.pdes.disabled=this.value!='';
  26.             }
  27.         function calcula3(data, elemSelect, indiceArray){
  28.             var psab= data.options[data.selectedIndex].value;
  29.             document.form1.sab.value = psab;
  30.             var pointset= parseInt(elemSelect.options[elemSelect.selectedIndex].text);
  31.             var datpast= global[indiceArray];
  32.             var atrset= document.getElementById("atr");
  33.             var atrpoint= parseInt(atrset.value);
  34.             atrpoint=atrpoint-datpast;
  35.             atrset.value=atrpoint+pointset;
  36.             global[indiceArray]=pointset;
  37.             document.form1.psab.disabled=this.value!='';
  38.             }

alguna idea?
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #5 (permalink)  
Antiguo 16/11/2011, 13:42
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
Respuesta: acortar script

solo me hace falta que alguien me diga como paso esto:

Código Javascript:
Ver original
  1. document.form1.frs.value = pfrs;

donde "frs" deve ser dinamico ya que los id cambian y lo manejo de esa forma
asi podria trabajar con

Código Javascript:
Ver original
  1. document.form1.'variable'.value = pfrs;

alguna idea??
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #6 (permalink)  
Antiguo 16/11/2011, 13:45
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: acortar script

No lo manejes segun el id del campo, sino por el class del campo, es la única forma de trabajar en forma dinámica, despues te fijarás la lógica a aplicar.

Saludos!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #7 (permalink)  
Antiguo 16/11/2011, 13:46
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
Respuesta: acortar script

Cita:
Iniciado por linuxzero Ver Mensaje
No lo manejes segun el id del campo, sino por el class del campo, es la única forma de trabajar en forma dinámica, despues te fijarás la lógica a aplicar.

Saludos!
algún ejemplo sencillo que pueda adaptar???
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #8 (permalink)  
Antiguo 16/11/2011, 13:51
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: acortar script

En js puro no estoy muy seguro, en jquery seria algo asi:

Como no manejas segun un id sino por class, tenes que recorrer todos los inputs que tengan esa clase y obtener el value, para eso lo haces asi en jquery:
Código Javascript:
Ver original
  1. $('.classInput').each(function(){
  2.     alert($(this).val());
  3. });

Este es un ejemplo de como accedes a cada input segun una clase, y como la clase la podes repetir no habria problema en cuantos tengas, total los recorre todos.

Esto es como para que tengas una idea de como trabaja, si necesitas js puro, lo buscamos ;)
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #9 (permalink)  
Antiguo 16/11/2011, 13:56
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 14 años, 6 meses
Puntos: 28
Respuesta: acortar script

ok el problema es que no puedo recorrerlo todos, ya que necesito que solo se active en el elemento usado y no en todos ademas no son input son select option.
creo que es mas complicado cambiar todo el script funcional a class que solo cambiar esto

Código Javascript:
Ver original
  1. document.form1.'variable'.value = pfrs;
  2. document.form1.[p+'variable'].disabled=this.value!='';

actualmente varieble contendria la cadena frs, entonces el elemento al que apunta deria el que tiene la id="frs" asi lo veo yo, mas sin envargo en la misma funcion debe modificar el atributo de el select option que tiene id="pfrs" por eso utiliso [p+'variable'] p+frs = pfrs

el cual no se como es la sintaxis correcta para que funcione.

la funcion la estoy llamando de esta forma:

Código Javascript:
Ver original
  1. onchange="calcula1(this,this, 0,'frs')
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB

Etiquetas: acortar, funcion
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 10:23.