Call function js inside another and depending on the result stop the execution of the parent function

1

Well, I have a function (1) with validations in js, I would like to call it inside another function (2) js and if the function one has a result, I would like to stop the execution of function 2 For example:

function validarCamposSimulador() {
if (form_alterar.opcoes.value == "Selecione...") {
    alert("Selecione um Tipo de Empréstimo!");  
    form_alterar.opcoes.focus();
    return false;
}
if (form_alterar.salario_bruto.value == "0,00" || form_alterar.salario_bruto.value == "") {
    alert("Digite seu Salário Bruto");  
    form_alterar.salario_bruto.focus();
    return false;
}
if (form_alterar.desconto.value == "") {
    alert("Digite um Desconto");    
    form_alterar.desconto.focus();
    return false;
}
if (form_alterar.salario_liquido.value == "0,00" || form_alterar.salario_liquido.value == "") {
    alert("Digite seu Salário Liquido");    
    form_alterar.salario_liquido.focus();
    return false;
}
if (form_alterar.valor_sol.value == "0,00" || form_alterar.valor_sol.value == "") {
    alert("Digite o Valor a ser Solicitado");   
    form_alterar.valor_sol.focus();
    return false;
}
}

Now inside this function I would like to call the previous

$("#btn_emp").click(function(){
        var valor_maximo = $("#val_max").val();
        var valor_sol = $("#valor_sol").val();
        var valor_entrada = $("#valor_entrada").val();
        var data_inicio = $("#data_inicio").val();
        var prazo = $("#prazo").val();
        data_inicio = data_inicio.replace("/", "-");
        data_inicio = data_inicio.replace("/", "-");
        var auxiliar;
        $.ajax({
          method: "GET",
          url: "../calcularEmprestimo.asp",
          data: { v_sol: valor_sol, v_ent: valor_entrada, prz: prazo,  val_max: valor_max, dt_ini: data_inicio },
          success: function(response) {
           document.getElementById("parcela_inicial").value = response; 
          }
        });
    
asked by anonymous 05.01.2017 / 17:27

2 answers

1
$("#btn_emp").click(function(){
  if (!validarCamposSimulador()) {
     return false;
  }
  var valor_maximo = $("#val_max").val();
  //...
});

However, for this, you need the function to return TRUE if everything is okay:

function validarCamposSimulador() {
if (form_alterar.opcoes.value == "Selecione...") {
    alert("Selecione um Tipo de Empréstimo!");  
    form_alterar.opcoes.focus();
    return false;
}
if (form_alterar.salario_bruto.value == "0,00" || form_alterar.salario_bruto.value == "") {
    alert("Digite seu Salário Bruto");  
    form_alterar.salario_bruto.focus();
    return false;
}
//..

 return true;//no final de tudo, fora de todos os ifs
}
    
05.01.2017 / 17:29
2

For this, the exemplo function has to return something to be analyzed.

There are two models, synchronous and asynchronous.

Synchronous:

function soNumeros(dados) {
  if (String(dados).match(/^\d+$/)) return true;
  else return false;
}

function exe(algo) {
  var numeroValido = soNumeros(algo);
  if (numeroValido) {
    console.log('Sim!', algo, 'é numero');
  } else {
    console.log('Não!', algo, 'não é numero');
  }
}

[1, 2, 'texto', '3'].forEach(function(teste) {
  exe(teste);
});

Asynchronous

Here you can do with callbacks, or Promises:

Callback:

function soNumeros(dados, done) {
  setTimeout(function() {
    if (String(dados).match(/^\d+$/)) done(true);
    else done(false);
  }, Math.random() * 2000);
}

function exe(algo) {
  soNumeros(algo, function(numeroValido) {
    if (numeroValido) {
      console.log('Sim!', algo, 'é numero');
    } else {
      console.log('Não!', algo, 'não é numero');
    }
  });
}

[1, 2, 'texto', '3'].forEach(function(teste) {
  exe(teste);
});

Promises:

function soNumeros(dados, done) {
  return new Promise(function(passa, falha) {
    setTimeout(function() {
      if (String(dados).match(/^\d+$/)) passa();
      else falha();
    }, Math.random() * 2000);
  });

}

function exe(algo) {
  soNumeros(algo).then(function() {
    console.log('Sim!', algo, 'é numero');
  }).catch(function() {
    console.log('Não!', algo, 'não é numero');
  });
}

[1, 2, 'texto', '3'].forEach(function(teste) {
  exe(teste);
});
    
05.01.2017 / 17:43