Estou utilizando a extensão maskedInput do jQuery para mascarar campos de texto.
E uma das funções oferecidas, é executar uma função callback, qdo a máscara estiver completa.
Porém, pelo meu baixo conhecimento em JS, não estou identificando um comportamento que ocorre:
Quando executo o código desta forma:
jQuery(function(){
$("#cep").mask("99999-999", {completed: function(){buscaEndereco()}});
});
Ocorre tudo como eu quero, quando eu completo a máscara, ou seja, qdo digito todos os caracteres do CEP, é chamada a função buscaEndereco.
Porém, se a função for chamada desta forma:
jQuery(function(){
$("#cep").mask("99999-999", {completed: buscaEndereco()});
});
A função buscaEndereco é chamada assim que a página é carregada. Pq isso ocorre?
No primeiro caso o callback funciona porque ele recebe uma função como parametro, então internamente ele chama o metodo call para executar esta funcão.
No segundo caso vc não esta passando uma função e sim o valor de retorno desta função, por isso que não esta funcionando.
Use o código abaixo, repare que eu não estou usando os parenteses no final da função buscaEndereco, porque estou passando a função como parametro e não o valor do retorno.
Obrigado pela resposta mmaico,
Esclareceu minha dúvida, sei que é algo básico, mas isso é o que dá começar a mexer no jquery sem antes saber muito de JS, mas as circunstancias estão pedindo isso.
Passada essa dúvida, surgiu outra:
Estou fazendo um combo com jQuery.ajax(). Ao selecionar um estado no combobox, o combo cidades já é populado com as cidades daquele estado.
Fiz e já está funcionando, porém eu só soube fazer com a servlet montando o html dentro dela e jogando para o jsp, daí quando o jQuery recebe o html, faço um:
Eu queria que a servlet retornasse um json ou até xml só com os dados da cidade, e sei fazer isso.
Porém o que não sei é fazer o jQuery popular o com os dados assim recebidos.
=/
Olá goldfish,
Usando Json você teria que montar o html no calback da sua função ajax, seria algo assim:
$.ajax {
url : '/cities/all',
dataType: 'json',
type: 'get',
success : function(cities) {
//O Json que voce retornar da sua servlet entrará na sua função com o parametro cities(pode ser qualquer nome)
var citiesOptions= '';
for(var i=0; i < cities.length; i++){
options += '<option value="' +cities[i].id +'">' + cities[i].name + '</option>';
}
$("#cidadesSelect").html(citiesOptions);
}
}
Então o java script já entenderá cities como um tipo json? Ele entende que é um json e vc já pode chegar usando como um array pra fazer um for?
que beleza isso…
Então se eu mandar um xml ele tb entende e consigo fazer o mesmo?
assim fica fácil
Sim, ele vai entender que é um json array e assim vc pode iterar sobre os itens, quanto ao xml vc precisaria mudar seu dataType, mas segue o mesmo esquema.