Ir para conteúdo

Arquivado

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

michelmfreitas

Problemas com Select Box - utilizando componente Select2

Recommended Posts

Olá pessoal, tudo bem? Esotu com um probleminha e gostaria de uma ajuda...

 

Possuo dois selects múltiplos no meu formulário, em que o segundo carrega os dados em dependência do primeiro select. Estou utilizando o componente SELECT2 (http://select2.github.io/select2/), para deixar tudo mais lindo e fácil para o meu cliente.

 

Lógica:

 

Meu primeiro select possui as opções: CASAS, APARTAMENTOS e LOJAS.

 

CASAS tem como opção -> 2 Quartos, 3 Quartos, 4 Quartos

APARTAMENTO tem como opção -> 1 Quarto, 2 Quartos, 3 Quartos, 4 Quartos

Loja tem como opção -> 1 Quarto

 

Quando seleciono o primeiro select CASAS, aparecem apenas as opções da mesma para seleção. Quando seleciono APARTAMENTOS, abre a opção de escolher as opções de ambos.

 

Até aí tudo bem. Porém, ao ALTERAR meu primeiro select, por exemplo, carregando a opção LOJA ou removendo a opção CASAS, ele some com os dados do segundo select.

 

Utilizo apenas uma classe para fazer todo o processo, já que tento trabalhar com reutilização de código.

 

Eis o código:

this.refresh=function(clear,onrefresh){

		var self=this;
		var conf = this.fieldconf();
		var ent=conf.params.entity;

		if(conf.params.beforeGetData){
			pack(conf.params.beforeGetData)(this);
		}
		console.log(ent, self.filters);
		admin.ajaxq.add({
			
			url:webroot('dyn_mod/EntityAssoc/get_data'),
			type:"post",
			data:{
				entity:ent , 
				filters:JSON.encode(self.filters)
			},
			success:function(r){
				var j=JSON.decode(r);
				if(j.code==1){
					//console.log(self.element);
					if(clear){
						self.element.find('select').children().remove();
						self.element.find('select').select2('data',[]);
					}

					$(j.data.objects).each(function(index,item){
						if(conf.params.renderOption){
							var opt=pack(conf.params.renderOption)(this,item);
							if(index==0){
								opt.attr('selected','selected');
							}
							//opt.attr('selected', 'selected');
							self.element.find('select').append(opt);
						}
					});
					
					if(clear){
						self.element.find('select').trigger('change');
					}
					
					if( onrefresh && !conf.params.multiple ) onrefresh();

					
					if(self.value && self.value.length && clear){
						self.element.find('select').select2('data',self.value);
					}

					if(self.selected){
						if( self.element.find('select option[value="'+self.selected+'"]').length>=1 ){
							self.element.find('select').val( self.selected );
							self.element.find('select').trigger('change');
						}
					}else{
						self.element.find('select').val(self.element.find('select option').first().val());
					}

					//se o select for multiple, ele entra aqui
					if ( conf.params.multiple && !self.valueloaded){
						
						self.valueloaded=true;
						//carregando os valores selecionados
						var assoc_model = conf.params.assoc_model;
						var assoc_field = conf.params.assoc_field;
						var assoc_entity = conf.params.entity;
						
						var entity=getconfig().entity;
						var id=self.getid();
											
						admin.ajaxq.add({
							url:webroot('diretorio/EntityAssoc/get_multiple_selecteds'),
							type:'post',
							data:{
								"assoc_model":assoc_model,
								"assoc_entity":assoc_entity,
								"assoc_field":assoc_field,
								"entity":entity,
								"id":id
							},
							success:function(r){
								var j = JSON.decode(r); // 2, 1
								var thedata=[];
								$(j.data.ids).each(function(index,id){
									thedata.push({id:id,text:self.element.find('option[value="'+id+'"]').html()});
								});
								self.value=thedata;
								self.element.find('select').select2('data',thedata);
								
								if(onrefresh) onrefresh();
								
							},error:function(){
								
							}
							
						});
						
					}else{
						if(onrefresh) onrefresh();
					}
					
					if(conf.params.onRefresh){
						//pack(conf.params.onRefresh)(this);
					}
					
				}
				
				
			},error:function(){
				
			}
			
			
		});
		
	};

Alguém pode me auxiliar, para saber onde está o erro? Obrigado!

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.