Ir para conteúdo
VCastilho

Criação de um Filtro Inteligente

Recommended Posts

Boa Tarde
Estou tentando desenvolver um Filtro Inteligente, no qual funcionaria da seguinte forma:

Filtro 1         Filtro 2          Filtro 3          Filtro 4 
Opção 1
Opção 2
Opção 3


Ao selecionar a Opção 1 do Filtro 1 liberaria as opções do filtro 2

Filtro 1         Filtro 2              Filtro 3          Filtro 4 
Opção 1      Opção 1 - a     
                     Opção 1 -b
                     Opção 1 -c

Assim escolhendo a opção do filtro 2 liberaria as opções do Filtro 3 e assim por diante
Ao escolher a Opção 2 do Filtro 1 liberaria outras opções

No caso preciso aplicar na plataforma da Tray, que é o de menos porém não consigo chegar ao código certo
Estou tentando utilizar o HTML e o JQuery em conjunto para isso, conseguem me ajudar? Realmente estou perdido na situação

Atenciosamente Vinicius Castilho

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
var Filtro = function(id, container, opcoes) {

    // Retorna a quantidade de níveis disponíveis
    this.getNiveis = function() {
        return $('.'+id, container).length;
    }

    // Obtém um array contendo somente os valores selecionados
    this.val = function() {
        var value = [];
        for(var i = 1; i <= this.getNiveis(); i++) {
            value.push($('#'+id+i).val());
        }
        return value;
    };

    // private (não chamar fora do objeto)
    this.getOpcoes = function() {
        var items = opcoes;
        for(var i = 0; i < arguments.length; i++) {
            if(typeof items[arguments[i]] != 'undefined') {
                items = items[arguments[i]];
            }
        }
        var _opcoes = [];
        $.each(items, function(item) {
            _opcoes.push(item);
        });
        return _opcoes;
    };

    // private (não chamar fora do objeto)
    this.getProximosFiltros = function(nivel) {
        return $('.'+id+':has(#'+id+nivel+')', container).nextAll('.'+id);
    };

    // private (não chamar fora do objeto)
    this.criarFiltro = function(nivel) {
        // Remove filtros posteriores
        var self = this;
        self.getProximosFiltros(nivel).andSelf().remove();

        // Cria o filtro em branco
        $('<div class="'+id+'"><label for="'+id+nivel+'">Filtro '+nivel+'</label><select id="'+id+nivel+'"><option></option></select></div>').appendTo(container);
        var $select = $('#'+id+nivel).on('change', function() {
            if($(this).val() == '') {
                self.getProximosFiltros(nivel).remove();
            } else {
                self.criarFiltro(nivel + 1);
            }
        });

        // Determina as opções do filtro novo
        var items = self.getOpcoes.apply(self.getOpcoes, self.val());

        // Adiciona as opções ao filtro novo
        // ou o remove, caso esteja vazio
        if(items.length > 0) {
            $.each(items, function() {
                $select.append('<option>'+this+'</option>');
            });
        } else {
            $select.closest('.'+id).remove();
        }
    };

    this.criarFiltro(1);
};
$(function() {
    document.instancia1 = new Filtro('instancia1', 'body', {
        "Carros": {
            "Volks": true,
            "Fiat": {
                "Linea": true,
                "Uno": true
            }
        },
        "Roupas": {
            "Camisetas": {
                "Manga longa": {
                    "Branca": true,
                    "Preta": true
                },
                "Manga curta": {
                    "Cinza": true
                }
            }
        }
    });
});
</script>
<button type="button" onclick="alert(document.instancia1.val().join(' > '));">Ver valores selecionados</button>
<button type="button" onclick="alert(document.instancia1.getNiveis());">Ver quantidade de níveis</button>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Eduardo S. B. de Oliveira
      Senhores, preciso de uma ajuda, estou criando um formulário onde o checkbox fique "checked" quando clicar em cima, mas o detalhe e que quando atualizar a pagina o checkbox permaneça marcado. É possível? 
    • Por joaon77@yahoo.com.br
      Olá pessoal!
      Criei um menu usando listas não ordenadas (ul, li) com as imagens dispostas horizontalmente. São quatro imagens. O problema é que uma das imagens aparece duplicada no layout. Não entendi. Segue o código:
      ... <span class="menuRedesSociais"> <ul> <li id="img1"><a href="#"</a></li> <li id="img2"><a href="#"></a></li> <li id="img3"><a href="#"></a></li> <li id="img4"><a href="#"></a></li> </ul> </span> span ul { margin: 0; padding: 0; } span li { list-style: none; display: inline-block; } span a:link, a:visited { padding: 15px; } li#img1 a{ background-image: url("#img1"); background-repeat: no-repeat; } li#img2 a{ background-image: url("#img2"); background-repeat: no-repeat; } li#img3 a{ background-image: url("#img3"); background-repeat: no-repeat; } li#img4 a{ background-image: url("#img4"); background-repeat: no-repeat; } A imagem que aparece duplicada é a img2. Obs. Já fiz o teste trocando a posição das imagens, só que o problema continua.
       
      Agradeço muito se alguém puder me ajudar.
       
    • Por VCastilho
      Bom Dia

      Desenvolvi um filtro HTML e estou com dificuldades em criar o JavaScript para o funcionamento do mesmo, poderiam em ajudar a criar esse JS?
      Segue o código:
       
      <div id = "filtro"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style disabled> #filtro { border-style:double; } #button1 { width: 120px; position: inherit; right: 10px; background-color: #e00505; font-size: 12px; FLOAT: right } h4 { font-size: 18px; border-style: inset; } select { border: 1px solid #000; box-sizing: border-box; width: 124px; border-radius: 5px; height: 25px; padding: 3px; } section label { width: calc(100% / 4); color: red; text-align: center; } section { display: flex; flex-wrap: wrap; } h4/ { border-style:double; } @media screen and (max-width:768px) { section label { margin-bottom: 20px; width: 100%; } } </style> <h4 style="text-align: center;">Personalize o seu Kit de Segurança</h4><br><br> <form action="#" id="form"> <section> <label> <b> Tipo do seu Kit </b><br> <select name="speed" id="speed" style=" "> <option desable>Selecione</option> <option>Residencial</option> <option>Comercial</option> </select> </label> <label> <b>Qualidade de Seu Kit</b><br> <select name="files" id="files" style=" "> <option desable> Selecione </option> <option value="HD">HD</option> <option value="Full HD">Full HD</option> <option value="Analógica">Analógica</option> </select> </label> <label> <b> Quantidade de Câmeras </b><br> <select name="number" id="number" style=" "> <option desable> Selecione </option> <option>1 Câmera</option> <option>2 Câmeras</option> <option>3 Câmeras</option> <option>4 Câmeras</option> <option>5 Câmeras</option> <option>6 Câmeras</option> <option>7 Câmeras</option> <option>8 Câmeras</option> <option>9 Câmeras</option> <option>10 Câmeras</option> <option>11 Câmeras</option> <option>12 Câmeras</option> <option>13 Câmeras</option> <option>14 Câmeras</option> <option>15 Câmeras</option> <option>16 Câmeras</option> </select> </label> <label> <b> Selecione a Marca </b><br> <select name="salutation" id="salutation"> <option desable selected>Selecione</option> <option>Intelbras</option> <option>Hikvision</option> <option>Outras</option> </select> </label> </section> <BR> <BR> </form> </div> <br> <br> <button class="kd-filter-button" id="button1">Ver resultados</button> Seria bom, se possível o botão funcionar fora da tag "form" pois para personalizar fica melhor

       
    • Por jaquelss
      Estava fazendo download de coisas que uso no trabalho, mas parece que esqueci de algo. Sempre dá esse erro, mas tecnicamente parece que tá tudo ok?
      Eu esqueci algum programa ou algo do código em si?
      Agradeço desde já.
    • Por rodrigoalgeri
      BOA NOITE
      OLHA ISSO onde esta escrito isso aqui "Health star ratings Kellogg reveals the cereal Rodrigo Algeri", tem uma pequena imagem em cima se voce perceber ela e uma imagem redonda so que nao aparece inteira voce sabe algum jeito pra aparecer ? tipo ela tem que ficar 75px altura e largura a altura fica, so que ela corta, EU GOSTARIA QUE FICASSE UM QUADRADO TIPO 75PX X
      75PX E ISSO E PRA FICAR EM TODAS ESSAS IMAGENS AI QUE TEM 

×

Informação importante

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