Ir para conteúdo

POWERED BY:

Arquivado

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

Spyder.RV

[Resolvido] jQuery - escopo em $.each()

Recommended Posts

Boa tarde pessoal,

 

Estou montando uma função onde preciso percorrer os elementos de um json e verificar se os dados existem num form, então percorro esse json usando um $.each... o problema é que para instanciar elementos do formulário, preciso da instancia do form que chamou a função e estou no escopo do each e só consegui resolver criando uma variavem antes para contar o formulário, antes de entrar no each...:

 

jQuery.fn.setData = function ( jsonData ) {

  var formulario = this; // Armazenar o formulário para ser usado dentro do escopo do $.each...

  $.each(jsonData, function(key, value){
 	var campo = $(formulario).find('[id="'+ key +'"]');
 	console.log(campo);
  });

});

 

Minha dúvida é simples... Existe um meio de conseguir referenciar o form que chamou a função diratmente dentro desse each? sem precisar criar mais uma variável?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesse teu caso não.

Pois o this de dentro do each é referente ao each, e não mais ao escopo externo.

 

Qual o problema com essa forma ? pq você quer "eliminar" essa variavel do formulário ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso... só quero eliminar mais uma variável e deixar o código mais "enxuto"...

 

Outro detalhe, tentei $(jsonData).parent().... mas aí também não dá pois ele veio como parâmetro da função...

 

mas tá tranquilo... era só saber se existia algum meio de fazer referência ao escopo anterior...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explica o que o teu código deveria fazer, e posta ele completo.

Ai podemos sugerir otimizações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explica o que o teu código deveria fazer, e posta ele completo.

Ai podemos sugerir otimizações.

 

 

 

A finalidade é popular formulários automaticamente, com dados json

 

 


// Busca dados no servidor...
$.get('URL/', function(data){
  // Popular o form
  $('#meuform').setData(data);
}, 'json');

jQuery.fn.setData = function ( data ) {
  var dataform = this;

  $.each(data, function(key, value){
     // Instancia os campos
     var campo = $(dataform).find('[id="'+ key +'"]');

     // Só faz atribuição se o campo no JSON também existir no formulário
     if( campo.exists() ){
    	if( $(campo).is('input[type=radio]') || $(campo).is('input[type=checkbox]') )
           // Checkboxes e Radios
           $(campo).attr('checked', ( value===1 )?true:false);
		else
       	// Demais campos
           $(campo).val(value);
     }
  });
};

// Verifica se elemento DOM existe
jQuery.fn.exists = function (){
  return $(this).length;
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

/* jQuery.values: get or set all of the name/value pairs from child input controls   
* @argument data {array} If included, will populate all child controls.
* @returns element if data was provided, or array of values if not
*/

$.fn.values = function(data) {
   var els = $(this).find(':input').get();

   if(typeof data != 'object') {
       // return all data
       data = {};

       $.each(els, function() {
           if (this.name && !this.disabled && (this.checked
                           || /select|textarea/i.test(this.nodeName)
                           || /text|hidden|password/i.test(this.type))) {
               data[this.name] = $(this).val();
           }
       });
       return data;
   } else {
       $.each(els, function() {
           if (this.name && data[this.name]) {
               if(this.type == 'checkbox' || this.type == 'radio') {
                   $(this).attr("checked", (data[this.name] == $(this).val()));
               } else {
                   $(this).val(data[this.name]);
               }
           }
       });
       return $(this);
   }
};

 

Fonte: http://stackoverflow.com/a/1490431/710693 :thumbsup:

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.