Ir para conteúdo

Arquivado

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

Hisoka.

Preencher select dinâmico com ajax

Recommended Posts

Boa tarde!

Tenho um sistema que preenche os dados do registro via ajax, na hora de editar. Tenho um select dinâmico nesse meio ai. O select "pai" eu consigo trazer os dados do banco via ajax, já o filho me retorna em branco.

Essa função é chamada ao abrir o modal:

function carregaDadosCdJSon(idchamado){
    		$.post(base_url+'/index.php/chamado/chamado_controller/dados_chamado', {
    			idchamado: idchamado
    		}, function (data){
    			(... outros dados ...)
    			$('#subcategoria').val(data.subcategoria_fk); 
    			$('#categoria_fk').val(data.categoria_fk); 
    		}, 'json');

HTML:

<label for="categoria">Categoria</label>
<select class="form-control" name="categoria_fk" id="categoria_fk" required="required" onchange='buscar_subcategoria($(this).val())'>                  
<option value="">Selecione uma categoria</option>
<?php foreach ($categoria -> result() as $linha): ?> 
<option value="<?php echo $linha->idcategoria?>"><?php echo $linha->nomecategoria?></option>
<?php endforeach;?>
</select>

                             
<div class="form-group">
<label for="exampleSelect1">Subcategoria</label>
<select class="form-control" name="subcategoria_fk" id="subcategoria">
</select>

O Javascript que preenche o select filho é aquele padrãozinho que acessa o php e gera o select.

function buscar_subcategoria(idcategoria){
          $.post(base_url+"/index.php/subcategoria/subcategoria_controller/ajax_dados_subcategoria", {
            idcategoria : idcategoria
            }, function(data){
            $('#subcategoria').html(data);
            });
        }

Recebe o id da view, faz a consulta e devolve o valor correspondente ao valor passado:

function ajax_dados_subcategoria($idcategoria){
            
            $this->load->model('subcategoria/subcategoria_model');
            
            $dados = $this->subcategoria_model->m_ajax_dados_subcategoria($idcategoria);
            
            $option = "<option value=''></option>";
            foreach($dados -> result() as $linha) {
            $option .= "<option value='$linha->idsubcategoria'>$linha->nomesubcategoria</option>"; 
            }

            echo $option;
            
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você seleciona um estado ele não traz a cidade? Ou é só quando você abre o modal para a edição?

Somente quando eu abro o modal para edição. Quando eu abro a primeira vez para cadastro td funciona. E se, por exemplo, eu abrir o modal de edição e alterar a categoria, a subcategoria passa a funcionar. Mas se eu n mexer na categoria, a subcategoria fica em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz uma requisição ajax assim que você clicar no botão editar, ai você pega o id do que você vai editar e faz uma verificação se do id da categoria e o id da subcategoria..

Ai você faz

$('#categoria_fk').val(data);
$('#subcategoria').val(data);

Ele retorna o id certo tanto da categoria qnt da sub. Já debuguei e vi que passa. Tanto é que qnd eu faço um foreach na subcategoria, ele exibe o dado a subcategoria sacou? É tipo assim, ele precisa que o valor esteja carregado na página para que o Ajax possa trazer no campo certo. Como o meu foreach de subcategoria é feito numa página PHP, ele n encontra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você vai na pq view de edição você tem o id que vai ser editado certo?

Com esse id você manda fazer a consulta no banco e verifica se tem, se tiver manda mostrar, eu fiz assim com o meu de estado e cidade.

<?php
if($model->city_id){
    $cidade = $con->createCommand("select c.id, c.city_id, a.name_city, b.state, b.id as cod_state from city a, state b, address c
                                     where a.state_id = b.id and a.id = c.city_id and c.id = '$model->id'");
    $resultado = $cidade->queryAll();
}
?>

 <select name="city_id" id="cidade" style="width: 17%; height: 31px;">
        <?php
           if($model->city_id){
               echo"<option value='".$model->city_id."'>".$resultado[0]['name_city']."</option>";
           }else{
               echo"<option>Sua Cidade</option>";
           }
        ?>

    </select>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você vai na pq view de edição você tem o id que vai ser editado certo?

Com esse id você manda fazer a consulta no banco e verifica se tem, se tiver manda mostrar, eu fiz assim com o meu de estado e cidade.

<?php
if($model->city_id){
    $cidade = $con->createCommand("select c.id, c.city_id, a.name_city, b.state, b.id as cod_state from city a, state b, address c
                                     where a.state_id = b.id and a.id = c.city_id and c.id = '$model->id'");
    $resultado = $cidade->queryAll();
}
?>

 <select name="city_id" id="cidade" style="width: 17%; height: 31px;">
        <?php
           if($model->city_id){
               echo"<option value='".$model->city_id."'>".$resultado[0]['name_city']."</option>";
           }else{
               echo"<option>Sua Cidade</option>";
           }
        ?>

    </select>

Amigo, perdoe me se não entendi corretamente, mas você usou a query na view?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por luiz monteiro
      Olá. Tenho 3 formulários em uma mesma pagina, onde cada um tem 1 input type text.
      O que preciso é recuperar o nome desses inputs e o valor correspondente ao formulário submetido.
      =============
      form name="formulario1" id="formulario1"
      input type="text" name="nome1" value="valor1" /form
      form name="formulario2" id="formulario2"
      input type="text" name="nome2" value="valor2" /form
      form name="formulario3" id="formulario3"
      input type="text" name="nome3" value="valor3" /form
      =============
      ..........
      var formulario_submetido = document.getElementById("formulario1"); formulario_submetido.addEventListener('submit', function(e) { e.preventDefault(); //tentei console.log(document.querySelectorAll('#'+this.id + ' input').name); //tentei var formula = new FormData(formulario_submetido); console.log(formula.input['type=text'].name); //tentei console.log(formula.get(input['type=text']).name); ..........
        no console.log(e), ele está nessa hierarquia   form -> srcElement -> input -> attributes -> name 
      Como recupero o valor do name dele e o valor do value?
       
      Agradeço desde já.
    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por FabianoSouza
      Eu preciso exibir duas informações em minha consulta:
      1) A quantidade de pessoas inscritas numa turma de treinamento (isso é feito com um simples COUNT)
      2) Uma flag de excesso de inscrições na turma. Seria obtido pela comparação entre a quantidade máxima permitida (já existe esse campo) e o COUNT feito acima.
       
      Até aqui sem problemas.
       
      O que quero é evitar fazer duas contagens (1 para saber a quantidade de inscritos, e outra para gerar a flag de excesso de inscrições).
       
      Há uma forma de utilizar UMA contagem para atender as duas necessidades?
       
      Meu código está assim:
       
      ... --AQUI FAZ A COMPARAÇÃO PARA GERAR A FLAG DE EXCESSO DE INSCRIÇÕES , CASE WHEN (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) > T.lotacaoMax Then T.nome + '&nbsp;'+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso&nbsp;de&nbsp;inscrições></span>' --AQUI FAZ A CONTAGEM DE INSCRIÇÕES , (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) AS 'Inscrições'  
    • Por FabianoSouza
      Possuo uma coluna de data.
      Eu gostaria que os registros com datas futuras aparecessem no topo do meu select, em relação aos demais registros.
      Em seguida, gostaria que somente esses registros com datas futuras ficassem em ordem crescente.
      Algo como 
       
      João  | 16/11/2023
      Maria | 17/11/2023
      José  |  20/11/2023
       
      -----------------------------
      (demais registros da base)
      Antônio   |  20/05/2023
      Rosa        | 15/08/2023
      Cida         | 15/10/2022
      Pedro      |  20/05/2021
      Paulo      |  14/11/2020
       
      O select seria esse.
      select dbo.formataData(ET.dataInicial) AS 'data' FROM dbo.tab AS ET GROUP BY ET.dataInicial  
    • Por ILR master
      Salve galera.
       
      Vou publicar um evento e quero colocar um Cronômetro regressivo que mostre em tempo real os dias, horas e minutos que faltam para determinada data, tipo:.
      Faltam 5 dias, 12:30:00 para inauguração.
       
      Qdo chegar no dia, quero que apenas apareça uma mensagem.
       
      Alguém pode me ajudar?
×

Informação importante

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