Ir para conteúdo

Arquivado

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

shini

plugin jquery

Recommended Posts

estava criando um plugin para o jquery, que preenche um combo com json via ajax. gostaria de uma opinião sobre o código pois acho q alguns trechos estão um pouco estranho....

 

assim q terminar de upar coloco o exemplo completo com banco de dados e arquivos .php

 

grato.

 

plugin:

jQuery.combo = function(settings){
var config = {
		'destiny'	: '',
		'url'		: ''  
};

if(settings){
	$.extend(config, settings);
}



listarSistemas(config.url, config.destiny);
};	


function listarSistemas(url, comboId){
   AjaxRequest.get({
       'url':url,

        'onLoading':function(){
        },

        'onSuccess':function(req){
           cleanCombo(comboId);
           setCombo(req.responseText, comboId);
        },
         'onError':function(req){
         }
    });
}	

function setCombo(data, comboId){

data =  eval(data);
var keys = getKeysJSON(data);

comboId[0].options[0] = new Option('Select..','');

for(i=0; i<data.length; i++){
	eval ("var description = data[i] ."+ keys[0]);
	eval ("var value = data[i] ."+ keys[1]);
	comboId[0].options[i+1] = new Option(value, description);
}			

}


function cleanCombo(comboId){
while (comboId[0].options.length) {
	comboId[0].remove(0);
}
}

function getKeysJSON(data){
var keys = Array();
var index = 0;

for(var i in data){
	for(var j in data[i]){
		keys[index] = j;
		index++;
	}
	break;
}
return keys;
}

 

 

exemplo de uso:

$(document).ready(function(){
	$.combo({destiny: $('#country'), url: 'list_country.php'});

	$('#country').change(function(){
		$.combo({destiny: $('#city'),
			url: 'find.php?id='+ $('#country').val()
			});
	});

});
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você não usa o ajax do jQuery mesmo ?

essas funções "publicas" estão estranhas nesse contexto do plugin.

 

combo dependente com json:

http://wbruno.com.br/blog/2009/10/06/combos-dependentes-ajax-jquery/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suma com os eval da sua vida:

 

eval ("var description = data ."+ keys[0]);

eval ("var value = data ."+ keys[1]);

 

Vira:

 

var description = data[keys[0]]

var value = data[keys[1]];

 

(em javascript, você pode usar a sintaxe de array pra acessar propriedades de objetos também :) )

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sabia disso, obrigado vou mudar.... rs qual é o problema do eval();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problemas de segurança acho.

 

No seu caso aí, as variáveis criadas com ele talvez tenham ficado globais e não locais.

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.