Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CrazyLOL

Return não funciona em funções Javascript

Recommended Posts

Galera, estou tendo uma dificuldade em trabalhar com o Javascript quando preciso usar o "return" no final de uma função para retornar algum valor...

 

Por exemplo, preciso retornar o ID de um logradouro porém quando clico no botão salvar e chamo a minha função e dou um alert para ver o resultado ele diz "undefined", porém no Debug que eu fiz o valor está vindo corretamente.

 

Para entender melhor está assim meu codigo..

 

Função logradouro:

var Logradouro = {    
    
    //variaveis
        logradouro_id       : '',
        tipo_logradouro_id  : '',
        logradouro          : '',

    loadLogradouro: function(input,form,seletorOrigem,seletor,selected){
        var text = input;

        if(text === '') {
                $$("#"+form+" #"+seletor).html("");                
            } else {                
                _db.transaction(function (tx){
                    tx.executeSql("select * from logradouro where logradouro like '"+text+"%' limit 5",[], function (tx,res){
                        //console.log(JSON.stringify(res));
                        var dataset = res.rows;
                        var str = "";

                        for(var i=0; i < dataset.length; i++){
                           var obj = dataset.item(i);
                            str += '<option value="'+obj.LOGRADOURO+'">';
                        }

                       $$("#"+form+" #"+seletor).html(str);
                       $$("#"+form+" #"+seletorOrigem).addClass('focus-state active-state');
                    },function(t,e){
                        Funcoes.alerta('Error: '+e.message,'Aviso');
                    });
                });
            }

    },

    getId: function(){
        _db.transaction(function (tx){
            tx.executeSql("select * from logradouro where logradouro like '"+Logradouro.logradouro+"%' limit 1",[], function (tx,res){                    
                    var dataset = res.rows;
                    var obj = dataset.item(0);

                    console.log(JSON.stringify(obj.LOGRADOURO_ID));
                    
                    return obj.LOGRADOURO_ID;                                
                },function(t,e){
                    Funcoes.alerta('Error: '+e.message,'Aviso');
            });
        });
    },

    salvarNovo: function(){
        _db.transaction(function (tx){
            tx.executeSql("select max(logradouro_id) as CODIGO from logradouro",[], function (ts,res){                    
                    var dataset = res.rows;
                    var obj = dataset.item(0);
                    var codigoId = (parseInt(obj.CODIGO) + 1);

                    var query = "insert into logradouro "+
                    "(logradouro_id, tipo_logradouro_id, ) "+
                    "values ('"+codigoId+"','33','"+Logradouro.logradouro+"',)";
                    
                    ts.executeSql(query, [], function (ts,res){
                        return codigoId;
                    }, function (t,e){
                        Funcoes.alerta('Error: '+e.message,'Aviso');
                    });
                                        
                },function (t,e){
                    Funcoes.alerta('Error: '+e.message,'Aviso');
            });
        });
    }
    
};

Quando eu clico no botão salvar eu faço isto aqui:

var Ficha= {    
    
   
    salvarDados: function(){
        //recebendo variaveis        
        
        Logradouro.logradouro        = $$("#ficha #logradouro").val();
        var teste = Logradouro.getId();

        alert(teste);
       
    }
    
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Crazy o problema é que vc está querendo que retorne valor dentro de uma função aninhada com outra, o para funcionar vc deve fazer da seguinte maneira

getId: function(){
        transaction = _db.transaction(function (tx){
            execute = tx.executeSql("select * from logradouro where logradouro like '"+Logradouro.logradouro+"%' limit 1",[], function (tx,res){                    
                    var dataset = res.rows;
                    var obj = dataset.item(0);

                    console.log(JSON.stringify(obj.LOGRADOURO_ID));
                    
                    return obj.LOGRADOURO_ID;                                
                },function(t,e){
                    Funcoes.alerta('Error: '+e.message,'Aviso');
            });

            return execute; //retorna o execute
        });

        return transaction; //retorno o dbTransaction
    },

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.