Execute command with variable -JS

2

Good morning,

On one page, I have some div that I've put an effect on for them to appear (toogle) I would like this effect to be rotated whenever I execute its function.

So, I discovered this function that shuffles the contents of an array

function embaralhar_efeito(o){
        for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
        return o[0]; //retorna somente o 1 valor.
    }

    var array_efeitos = ['slideToggle','slideDown','slideUp','fadeToggle','fadeTo','fadeIn'];
    var efeito_toogle = embaralhar_efeito(array_efeitos);

So, I pass the result to the function that would make toogle in my div:

function efeito_pergunta(efeito){

        var modifica = '$("#div_pergunta").';
        var modifica_2 = efeito+'(3000);';

        var acao = modifica + modifica_2;
    }

When the alert is triggered, it returns $ ("# div_quest"). slideDown (3000); // here, the effect (slideDown) changes as it performs the shuffle_ effect. But the div does not get the effect of toogle.

Can you execute the code like this?

Ha ha, grateful

    
asked by anonymous 20.10.2015 / 16:29

3 answers

1

Instead of turning every jquery method into a string and saving to a variable you can execute directly just passing as a property of an object:

function embaralhar_efeito(o) {
  for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
  return o[0]; //retorna somente o 1 valor.
}
var array_efeitos = ['slideToggle', 'slideDown', 'slideUp', 'fadeToggle', 'fadeTo', 'fadeIn'];
var efeito_toogle = embaralhar_efeito(array_efeitos);
efeito_pergunta(efeito_toogle);

function efeito_pergunta(efeito) {
  $("#div_pergunta")[efeito]('3000');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script><divid="div_pergunta">Conteudo aqui</div>
    
20.10.2015 / 17:17
3

You can use [] to access an object's properties and methods from the value of a variable.

function efeito_pergunta(efeito) {
   $('#div_pergunta')[efeito](300);
}

See here an example working

    
20.10.2015 / 17:06
1

Try the following:

function efeito_pergunta(efeito){
    var modifica = '$("#div_pergunta").';
    var modifica_2 = efeito+'(3000);';
    var acao = modifica + modifica_2;
    eval(acao);
}
    
20.10.2015 / 17:03