Foros del Web » Programando para Internet » Javascript »

¿Cómo pasar un valor a una función?

Estas en el tema de ¿Cómo pasar un valor a una función? en el foro de Javascript en Foros del Web. Hola, buenas tardes... Sí, la pregunta es un poco rara. Si sé como pasar un valor a una función en sí, pero no sé como ...
  #1 (permalink)  
Antiguo 31/03/2017, 14:17
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
¿Cómo pasar un valor a una función?

Hola, buenas tardes...

Sí, la pregunta es un poco rara. Si sé como pasar un valor a una función en sí, pero no sé como pasarla en el siguiente caso... les explico.

Tengo el siguiente código para crear un carrito de compras, el código no fue hecho por mí, pero le he estado haciendo algunas adaptaciones de acuerdo a lo que necesito. El código es el siguiente:

https://github.com/gabrieleromanato/...jquery.shop.js

Funciona muy bien, pero quiero hacer una adecuación con respecto a los envíos. Dependiendo la ciudad el costo será diferente. Entonces, tengo está función que implementé...

Código Javascript:
Ver original
  1. getCities: function(){
  2.            
  3.             // Obtenemos la ciudad
  4.             $("#country").change(function(e) {
  5.                 var country = $(this).val();
  6.                
  7.                 alert(country);
  8.                 return country;
  9.             });        
  10.         },

La idea es que cada que se cambie la ciudad se cambie el importe del envío, en esta función:

Código Javascript:
Ver original
  1. _calculateShipping: function( qty ) {
  2.             var shipping = 0;
  3.            
  4.             if( qty >= 6 ) {
  5.                 shipping = 10;
  6.             }
  7.             if( qty >= 12 && qty <= 30 ) {
  8.                 shipping = 20; 
  9.             }
  10.            
  11.             if( qty >= 30 && qty <= 60 ) {
  12.                 shipping = 30; 
  13.             }
  14.            
  15.             if( qty > 60 ) {
  16.                 shipping = 0;
  17.             }
  18.            
  19.             return shipping;
  20.        
  21.         },

actualmente funciona con la cantidad de productos, utilizando la variable qty, pero ya intenté por todos los medios de utilizar las variables de country, sCountry y la que cree en mi pequeña función, sólo que al parecer no llegan los valores (sí, ya modifique los argumentos que se pasan a la función) pero no logro que los convoque. La idea es que quede algo como:

Código Javascript:
Ver original
  1. _calculateShipping: function( country, sCountry) {
  2.             var shipping = 0;
  3.            
  4.             if(country == 'x ciudad'){ shipping = 10; }
  5.             if(country == 'y ciudad'){ shipping = 25; }
  6.             if(country == 'z ciudad'){ shipping = 50; }
  7.            
  8.             return shipping;

No tengo mucha experiencia en javascript, pero no creo estar muy alejado de lo que estoy tratando de hacer. ¿Alguna idea?

De antemano, les agradezco por sus comentarios.

Saludos!!
  #2 (permalink)  
Antiguo 04/04/2017, 10:31
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cómo pasar un valor a una función?

Estas poniendo el tejado debajo y los cimientos encima. Si declaras la funcion getCities para obtener las ciudades y dentro asignas el evento change, nunca llamarás a getCities realmente.

Si es un combo prueba a poner un onchange en el <select> que llame al método getCities, a partir de ahi buscas el option 'selected' y lo extraes.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 04/04/2017, 16:57
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: ¿Cómo pasar un valor a una función?

Tengo una duda...

La función original llama a la variable qty y dependiendo de su valor hace el cálculo de el envío:

Código Javascript:
Ver original
  1. _calculateShipping: function( qty ) {
  2.             var shipping = 0;
  3.            
  4.             if( qty >= 6 ) {
  5.                 shipping = 10;
  6.             }
  7.             if( qty >= 12 && qty <= 30 ) {
  8.                 shipping = 20;  
  9.             }
  10.            
  11.             if( qty >= 30 && qty <= 60 ) {
  12.                 shipping = 30;  
  13.             }
  14.            
  15.             if( qty > 60 ) {
  16.                 shipping = 0;
  17.             }
  18.            
  19.             return shipping;
  20.        
  21.         },

ahora, yo necesito llamar a la variable "country" y cuando el valor sea "Ciudad de México" el envío sea de cero pesos y cualquier otro el envío sea de 100 pesos:

Código Javascript:
Ver original
  1. _calculateShipping: function( country ) {
  2.             var shipping = 0;
  3.            
  4.            
  5.             if( country == 'Ciudad de México' ) {
  6.                 shipping = 0;
  7.             } else {
  8.                
  9.                 shipping = 100;                
  10.             }
  11.  
  12.            
  13.             return shipping;
  14.        
  15.         },

el problema es que el valor de country no llega a la función... quizá no la estoy invocando bien, pero no estoy seguro :/ la variable esta disponible en:

Código Javascript:
Ver original
  1. displayUserDetails: function() {
  2.             if( this.$userDetails.length ) {
  3.                 if( this.storage.getItem( "shipping-name" ) == null ) {
  4.                     var name = this.storage.getItem( "billing-name" );
  5.                     var email = this.storage.getItem( "billing-email" );
  6.                     var city = this.storage.getItem( "billing-city" );
  7.                     var address = this.storage.getItem( "billing-address" );
  8.                     var zip = this.storage.getItem( "billing-zip" );
  9.                     var country = this.storage.getItem( "billing-country" );
  10.                    
  11.                     var html = "<div class='detail'>";
  12.                         html += "<h2>Facturación y envío</h2>";
  13.                         html += "<ul>";
  14.                         html += "<li>" + name + "</li>";
  15.                         html += "<li>" + email + "</li>";
  16.                         html += "<li>" + city + "</li>";
  17.                         html += "<li>" + address + "</li>";
  18.                         html += "<li>" + zip + "</li>";
  19.                         html += "<li>" + country + "</li>";
  20.                         html += "</ul></div>";
  21.                        
  22.                     this.$userDetails[0].innerHTML = html;
  23.                 } else {
  24.                     var name = this.storage.getItem( "billing-name" );
  25.                     var email = this.storage.getItem( "billing-email" );
  26.                     var city = this.storage.getItem( "billing-city" );
  27.                     var address = this.storage.getItem( "billing-address" );
  28.                     var zip = this.storage.getItem( "billing-zip" );
  29.                     var country = this.storage.getItem( "billing-country" );
  30.                    
  31.                     var sName = this.storage.getItem( "shipping-name" );
  32.                     var sEmail = this.storage.getItem( "shipping-email" );
  33.                     var sCity = this.storage.getItem( "shipping-city" );
  34.                     var sAddress = this.storage.getItem( "shipping-address" );
  35.                     var sZip = this.storage.getItem( "shipping-zip" );
  36.                     var sCountry = this.storage.getItem( "shipping-country" );
  37.                    
  38.                     var html = "<div class='detail'>";
  39.                         html += "<h2>Facturación</h2>";
  40.                         html += "<ul>";
  41.                         html += "<li>" + name + "</li>";
  42.                         html += "<li>" + email + "</li>";
  43.                         html += "<li>" + city + "</li>";
  44.                         html += "<li>" + address + "</li>";
  45.                         html += "<li>" + zip + "</li>";
  46.                         html += "<li>" + country + "</li>";
  47.                         html += "</ul></div>";
  48.                        
  49.                         html += "<div class='detail right'>";
  50.                         html += "<h2>Envío</h2>";
  51.                         html += "<ul>";
  52.                         html += "<li>" + sName + "</li>";
  53.                         html += "<li>" + sEmail + "</li>";
  54.                         html += "<li>" + sCity + "</li>";
  55.                         html += "<li>" + sAddress + "</li>";
  56.                         html += "<li>" + sZip + "</li>";
  57.                         html += "<li>" + sCountry + "</li>";
  58.                         html += "</ul></div>";
  59.                        
  60.                     this.$userDetails[0].innerHTML = html; 
  61.                
  62.                 }
  63.             }
  64.         },

así como "qty" en su propia función...
  #4 (permalink)  
Antiguo 05/04/2017, 01:22
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cómo pasar un valor a una función?

No entiendo lo de la misma función con dos variables diferentes por separado. Javascript solo reconoce que estás creando la misma función con un parámetro dos veces y eso llevaría a un error.

Se te ve muy perdido, deberías replantearte si simplificar las cosas en problemas más pequeños y hacerlos funcionar primero para luego juntarlos y llegar a lo que buscas y no tratar de mezclar todas las dudas de un problema más complejo en un mismo post.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 05/04/2017, 08:38
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: ¿Cómo pasar un valor a una función?

Ok, para que quede más claro. Voy a omitir la parte de crear una nueva función obteniendo el valor del Select cuando cambie al seleccionar diferente ciudad (esta es la que estaba yo creando adicional al programa) ¿por qué? Bueno, esto debido a que dentro del mismo código hay una función donde se puede obtener la ciudad seleccionada, esto es en:

Código Javascript:
Ver original
  1. displayUserDetails: function() {
  2.             if( this.$userDetails.length ) {
  3.                 if( this.storage.getItem( "shipping-name" ) == null ) {
  4.                     var name = this.storage.getItem( "billing-name" );
  5.                     var email = this.storage.getItem( "billing-email" );
  6.                     var city = this.storage.getItem( "billing-city" );
  7.                     var address = this.storage.getItem( "billing-address" );
  8.                     var zip = this.storage.getItem( "billing-zip" );
  9.                     var country = this.storage.getItem( "billing-country" );
  10.                    
  11.                     var html = "<div class='detail'>";
  12.                         html += "<h2>Facturación y envío</h2>";
  13.                         html += "<ul>";
  14.                         html += "<li>" + name + "</li>";
  15.                         html += "<li>" + email + "</li>";
  16.                         html += "<li>" + city + "</li>";
  17.                         html += "<li>" + address + "</li>";
  18.                         html += "<li>" + zip + "</li>";
  19.                         html += "<li>" + country + "</li>";
  20.                         html += "</ul></div>";
  21.                        
  22.                     this.$userDetails[0].innerHTML = html;
  23.                 } else {
  24.                     var name = this.storage.getItem( "billing-name" );
  25.                     var email = this.storage.getItem( "billing-email" );
  26.                     var city = this.storage.getItem( "billing-city" );
  27.                     var address = this.storage.getItem( "billing-address" );
  28.                     var zip = this.storage.getItem( "billing-zip" );
  29.                     var country = this.storage.getItem( "billing-country" );
  30.                    
  31.                     var sName = this.storage.getItem( "shipping-name" );
  32.                     var sEmail = this.storage.getItem( "shipping-email" );
  33.                     var sCity = this.storage.getItem( "shipping-city" );
  34.                     var sAddress = this.storage.getItem( "shipping-address" );
  35.                     var sZip = this.storage.getItem( "shipping-zip" );
  36.                     var sCountry = this.storage.getItem( "shipping-country" );
  37.                    
  38.                     var html = "<div class='detail'>";
  39.                         html += "<h2>Facturación</h2>";
  40.                         html += "<ul>";
  41.                         html += "<li>" + name + "</li>";
  42.                         html += "<li>" + email + "</li>";
  43.                         html += "<li>" + city + "</li>";
  44.                         html += "<li>" + address + "</li>";
  45.                         html += "<li>" + zip + "</li>";
  46.                         html += "<li>" + country + "</li>";
  47.                         html += "</ul></div>";
  48.                        
  49.                         html += "<div class='detail right'>";
  50.                         html += "<h2>Envío</h2>";
  51.                         html += "<ul>";
  52.                         html += "<li>" + sName + "</li>";
  53.                         html += "<li>" + sEmail + "</li>";
  54.                         html += "<li>" + sCity + "</li>";
  55.                         html += "<li>" + sAddress + "</li>";
  56.                         html += "<li>" + sZip + "</li>";
  57.                         html += "<li>" + sCountry + "</li>";
  58.                         html += "</ul></div>";
  59.                        
  60.                     this.$userDetails[0].innerHTML = html;  
  61.                
  62.                 }
  63.             }
  64.         },

ahora, siendo que la ciudad se puede obtener de aquí, la parte que no entiendo es porque no puedo invocarla en esta otra función:

Código Javascript:
Ver original
  1. _calculateShipping: function( qty ) {
  2.             var shipping = 0;
  3.            
  4.             if( qty >= 6 ) {
  5.                 shipping = 10;
  6.             }
  7.             if( qty >= 12 && qty <= 30 ) {
  8.                 shipping = 20;  
  9.             }
  10.            
  11.             if( qty >= 30 && qty <= 60 ) {
  12.                 shipping = 30;  
  13.             }
  14.            
  15.             if( qty > 60 ) {
  16.                 shipping = 0;
  17.             }
  18.            
  19.             return shipping;
  20.        
  21.         },

para que en lugar de generar el envío por la cantidad de productos, lo calcule en base a la ciudad seleccionada. Intente llamarla en function ( country ), pero al parecer no llega el valor seleccionado cuando el procedimiento es el mismo que si llamara qty como en el código original.

Y sí, en efecto, me tiene un poco perdido el no poder obtenerlo, como comenté anteriormente, javascript aún no es mi fuerte pero no veo porque se me está complicando tanto llamar una variable :/

Saludos!!

Etiquetas: funcion, valor
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 12:23.