Ir para conteúdo

POWERED BY:

Arquivado

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

ribeiro3001

preenchimento de 3 combos, através de eventos, on, emitter

Recommended Posts

Olá amigos!

Sou novo no fórum e desculpem se postei errado.

Gostaria de uma orientação no código que estou implementando, tenho 3 combos departamento, divisão e seção, e gostaria de ao selecionar a 1ª combo Departamento que já está preenchida, preencher a 2ª combo Divisão e ao preencher a 2ª combo divisão , preencher a 3ª combo seção, consegui implementar o preenchimento da 2ª combo Divisão através de um evento, mas não estou conseguindo, fazer o mesmo para o preenchimento da 3ª combo seção.Se algum amigo mais experiente puder me orientar ficarei muito grato. segue o código em JavaScript  para melhor analise dos amigos .Desde já agradeço a atenção dos amigos e um grande abraço.

var Cofipa = Cofipa|| {};

Cofipa.ComboDepartamento = (function() { // criei o objeto departamento
	
	function ComboDepartamento() {
		this.combo = $('#departamento');
		this.emitter = $({});
		this.on = this.emitter.on.bind(this.emitter); // lanço um evento através do emitter
	}
	
	ComboDepartamento.prototype.iniciar = function() { // 
		this.combo.on('change', onDepartamentoAlterado.bind(this));
	}
	
	function onDepartamentoAlterado() {
		this.emitter.trigger('alterado', this.combo.val());
	}
	
	return ComboDepartamento;
	
}());

Cofipa.ComboDivisao = (function() {
	
	function ComboDivisao(comboDepartamento) {
		this.comboDepartamento = comboDepartamento;
		this.combo = $('#divisao');
		this.imgLoading = $('.js-img-loading');
	}
	
	ComboDivisao.prototype.iniciar = function() {
		reset.call(this);
		this.comboDepartamento.on('alterado', onDepartamentoAlterado.bind(this));
	
	}
	
	
	function onDivisaoAlterada() {
		this.emitter.trigger('alterado', this.combo.val());
	}
	
	function onDepartamentoAlterado(evento, codigoDepartamento) {
		console.log('departamento selecionado', codigoDepartamento)
		if (codigoDepartamento) {
			var resposta = $.ajax({
				url: this.combo.data('url'),
				method: 'GET',
				contentType: 'application/json',
				data: { 'departamento': codigoDepartamento}, 
				beforeSend: iniciarRequisicao.bind(this),
				complete: finalizarRequisicao.bind(this)
			});
			resposta.done(onBuscarDivisoesFinalizada.bind(this));
		} else {
			reset.call(this);
		}
	}
	
	function onBuscarDivisoesFinalizada(divisoes) {
		var options = [];
		divisoes.forEach(function(divisao) {
			//console.log('divisoes', divisao)
			options.push('<option value"' + divisao.codigo + '">' + divisao.nome + '</option>');
		});
		
		this.combo.html(options.join(''));
		this.combo.removeAttr('disabled');
	}
	
	function reset() {
		this.combo.html('<option value="">Selecione a divisao</option>');
		this.combo.val('');
		this.combo.attr('disabled', 'disabled');
	}
	
	function iniciarRequisicao() {
		reset.call(this);
		this.imgLoading.show();
	}
	
	function finalizarRequisicao() {
		this.imgLoading.hide();
	}
	
	
	return ComboDivisao;
	
  // até aqui consigo preencher a combo divisão.
	
}());


Cofipa.ComboSecao = (function() {
	
	function ComboSecao(comboDivisao) {  // daqui em diante não consigo pegar o id(codigoDivisão)
		this.comboDivisao = comboDivisao;
		this.combo = $('#secao');
		this.imgLoading = $('.js-img-loading');
	}
	
	ComboSecao.prototype.iniciar = function() {
		reset.call(this);
		this.comboDivisao.on('alterado', onDivisaoAlterada.bind(this));
	}
	
	function onDivisaoAlterada(evento, codigoDivisao) {
		console.log('divisao selecionado', codigoDivisao) // aqui mostra apenas o nome não o código
		if (codigoDivisao) {
			var resposta = $.ajax({
				url: this.combo.data('url'),
				method: 'GET',
				contentType: 'application/json',
				data: { 'divisao': codigoDivisao}, 
				beforeSend: iniciarRequisicao.bind(this),
				complete: finalizarRequisicao.bind(this)
			});
			resposta.done(onBuscarSecoesFinalizada.bind(this));
		} else {
			reset.call(this);
		}
	}
	
	function onBuscarSecoesFinalizada(secoes) {
		var options = [];
		secoes.forEach(function(secao) {
			console.log('secoes', secao)
			options.push('<option value"' + secao.codigo + '">' + secao.nome + '</option>');
		});
		
		this.combo.html(options.join(''));
		this.combo.removeAttr('disabled');
	}
	
	function reset() {
		this.combo.html('<option value="">Selecione a secao</option>');
		this.combo.val('');
		this.combo.attr('disabled', 'disabled');
	}
	
	function iniciarRequisicao() {
		reset.call(this);
		this.imgLoading.show();
	}
	
	function finalizarRequisicao() {
		this.imgLoading.hide();
	}
	
	return ComboSecao;

	
	
}());


$(function() {
	
	var comboDepartamento = new Cofipa.ComboDepartamento();
	comboDepartamento.iniciar();
	
	var comboDivisao = new Cofipa.ComboDivisao(comboDepartamento);
	comboDivisao.iniciar();
	
	var comboSecao = new Cofipa.ComboSecao(comboDivisao);
	comboSecao.iniciar();
	
});

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por luizpaps
      Boa tarde, tenho um winform com tabcontrol e 2 tabpages, na tabpage1 tenho um combobox vinculado ao banco MySql, quando seleciono um registro no combobox ele preenche os textbox da tabpage1 com os dados relativo àquele registro do banco, mas quando clico na tabpage2 para preencher outros textbox adicionais que não dependem do banco e volto para tabpage1, todos os textbox são apagados e o combobox fica desvinculado do banco, sem itens, alguém pode me ajudar a resolver esse problema? o código que uso para carregar o combobox está abaixo:
      public void CarregaComboServidores() { try { if (cn.State == ConnectionState.Closed) cn.Open(); } catch (Exception ex) { MessageBox.Show("Erro ao Carregados dados da Tabela tservidores " + ex.Message + " contate o desenvolvedor", "SysDiárias - Erro de Conexão", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { string mSQLServidores = "select * from tservidores"; MySqlCommand cmdServidores = new MySqlCommand(mSQLServidores, cn); MySqlDataAdapter mdaServidores = new MySqlDataAdapter(cmdServidores); DataTable dtServidores = new DataTable(); cmbNome.DataSource = null; cmbNome.Items.Clear(); mdaServidores.Fill(dtServidores); cmbNome.DataSource = dtServidores; cmbNome.ValueMember = "idservidor"; cmbNome.DisplayMember = "nome"; cmbNome.SelectedIndex = (-1); cmbNome.Refresh(); if (cn.State == ConnectionState.Open) cn.Close(); } }  
    • Por arildomello
      Boa tarde.
      Sou novo na programação, estou criando com  entity framework utilizando com c# banco de dados mysql.
      tenho duas classes na grid eu recebo todos os movimentos, consigo filtrar por data tudo certo, no entanto preciso filtrar por uma categoria especifica que recebo do banco na minha combobox .
      no meu código só filtra uma e ainda erreda na que consta na combobox.




    • Por dutopfave
      Galera tenho um cadastro de cliente que preenche nome e login, ai quando digita o nome, automaticamente ele preenche o login, pra agiliza, ta assim: $("#inputdonome").blur(function(){ $("#login").val($(this).val()); }); só que to com problema de nome repetido, então vou muda ao invés de preenche automático com nome, preenche com EMAIL, porém tem como preenche automático o login só q para antes de chega no '@'   ai ficaria assim:

      E-mail: contato2019@site.com.br
      Login: contato2019
    • Por nathicoelhoo
      Tenho um cadastro de cliente e no cadastro é selecionado o sexo e o estado, por exemplo. Na área de edição, preciso puxar esses dados JÁ SELECIONADOS para um combobox. Tentei fazer com foreach porém não funcionou. Alguém pode me ajudar?
      <div class="form-group col-md-5" > <label for="inputSexo">Sexo</label> <select name="sexo_cliente" id="sexo_cliente" class="form-control" disabled> <option selected disabled="">Sexo</option> <?php require_once "api/conexao.php"; try { $prepared3 = $conexao_pdo->prepare("select * from sexo"); $prepared3->execute(); $result3 = $prepared3->fetchAll(); foreach($result3 as $resultado3) { echo "<option value='". $resultado3["cod"] ."'>". $resultado3["sexo"] ."</option>"; } } catch (PDOException $e) { echo "<option></option>"; } ?> </select> </div>  
    • Por padini
      Boa noite pessoal, estou com problemas em criar um menu dropdown onde as opções deem um resultado final na própria página. 
       
      Exemplo: 
      Caixa 1 - Estados 
      Caixa 2 - cidades 
      Resultado em texto abaixo: Lojas daquela cidade e estado e caso não houver nenhuma loja, o resultado seria uma mensagem padrão. 
       
      é como este: https://www.unimed.coop.br/servicos/segunda-via-de-boletos Porem esse gera um terceiro dropdown e depois uma página externa. 
       
      Já consegui gerar o banco de dados para que cidade e estados estejam interligados, porem não consigo fazer aparecer o resultado. 
       
       
×

Informação importante

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