es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada a una función dentro de otra función que no funciona.

Tengo una función que llamo para inicializar una página:

function initialize_selections() {
var freeamountElement = document.getElementById("text-freeamount");
var dlyElement = document.getElementById("text-dly");
var freeshipperElement = document.getElementById("text-freeshipper");
if(freeamountElement){
  var shippingMethod = document.getElementById("text-freeamount").innerText;
  document.getElementById('radio-freeamount').checked = true;
  document.getElementById('value-shipping').innerHTML = '$0.00';
  document.getElementById('text-shipping').innerHTML = shippingMethod;

}else if(dlyElement){
  var shippingMethod = document.getElementById("text-dly").innerText;
  document.getElementById('radio-dly').checked = true;
  document.getElementById('value-shipping').innerHTML = '$0.00';
  document.getElementById('text-shipping').innerHTML = shippingMethod;
}else if(freeshipperElement){
  var shippingMethod = document.getElementById("text-freeshipper").innerText;
  document.getElementById('radio-freeshipper').checked = true;
  document.getElementById('value-shipping').innerHTML = '$0.00';
  document.getElementById('text-shipping').innerHTML = shippingMethod;
}else{
  var shippingMethod = document.getElementById("text-upsxml").innerText;
  var shippingValue = document.getElementById("value-upsxml").innerText;
  document.getElementById('radio-upsxml').checked = true;
  document.getElementById('value-shipping').innerHTML = shippingValue;
  document.getElementById('text-shipping').innerHTML = shippingMethod;  
}
// myPoints();
};

Esto funciona bien en la carga inicial de la página. Dependiendo de las condiciones específicas, quiero llamarla de nuevo desde una función separada:

function hideForm(){
if (document.getElementById('thebox').checked==true){
  document.getElementById('formdiv').style.display="block";
  document.getElementById('formdiv2').style.display="none";
  document.getElementById('formdiv3').style.display="block";
  var shipping_method = 'Recoge tu pedido';
  document.getElementById('text-shipping').innerHTML = shipping_method ;
  document.getElementById('value-shipping').innerHTML = '$0.00';
  document.querySelector('input[name="shipping"]:checked').checked = false;
//  myPoints();

} else {
  document.getElementById('formdiv').style.display="none";
  document.getElementById('formdiv2').style.display="block";
  document.getElementById('formdiv3').style.display="none";
  var shipping_method = document.getElementById('text-upsxml').innerText;
  document.getElementById('text-shipping').innerHTML = shipping_method ;
  var shipping_value = document.getElementById('value-upsxml').innerText;
  document.getElementById('value-shipping').innerHTML = shipping_value;
  document.querySelector('input[name="shipping"]:checked').checked = false;
  document.querySelector('input[name="payment"]:checked').checked = false;
  initialize_selections();
};
};

Ambos códigos funcionan bien y hacen lo que busco, excepto que no puedo llamar initialize_selections desde hideForm (lo mismo sucede con la función myPoints, pero la excluí para aislar el problema).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que la función initialize_selections no es accesible desde la función hideForm. Esto se debe a que la función initialize_selections está definida en un alcance diferente. Una solución podría ser declarar initialize_selections en el alcance global para que pueda ser accedido desde cualquier lugar, incluyendo la función hideForm. Otra solución podría ser hacer que initialize_selections sea un método de un objeto y luego llamarlo usando la sintaxis del objeto.método() desde la función hideForm.

Comments are closed.