{"id":678,"date":"2017-05-09T15:40:41","date_gmt":"2017-05-09T18:40:41","guid":{"rendered":"http:\/\/gianfratti.com\/?p=678"},"modified":"2017-05-09T16:49:20","modified_gmt":"2017-05-09T19:49:20","slug":"combobox-dinamico-com-json-e-jquery-sem-requisicao-ajax","status":"publish","type":"post","link":"http:\/\/gianfratti.com\/index.php\/combobox-dinamico-com-json-e-jquery-sem-requisicao-ajax\/","title":{"rendered":"Combobox din\u00e2mico com JSON e jQuery sem requisi\u00e7\u00e3o AJAX"},"content":{"rendered":"<p><strong>Combobox, DropDownList, Select<\/strong>, enfim, como queira chamar. Preparei um artigo mostrando como carregar os options de um select dinamicamente utilizando apenas JSON, sem chamadas Ajax.<\/p>\n<p class=\" IL_IC_MIN\">Utilizei apenas HTML e jQuery para mostrar o carregamento do DropDownList din\u00e2mico de categorias e subcategorias baseado em dois arrays. O mesmo se aplicaria, obviamente, para carregar Estado e Cidade dinamicamente.<!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-699\" src=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/05\/Combo_Jquery_Json.png\" alt=\"\" width=\"307\" height=\"37\" srcset=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/05\/Combo_Jquery_Json.png 307w, http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/05\/Combo_Jquery_Json-300x36.png 300w\" sizes=\"auto, (max-width: 307px) 100vw, 307px\" \/><\/p>\n<p>A grande vantagem aqui \u00e9 a velocidade em carregar o segundo combo, carregar sem Ajax e n\u00e3o depender de uma linguagem de programa\u00e7\u00e3o backend (C#, PHP&#8230;)<\/p>\n<p>Fundamentalmente \u00e9 apenas mais uma alternativa para casos espec\u00edficos.<\/p>\n<p>Copie o c\u00f3digo abaixo e salve em um arquivo (.html) e execute no navegador de sua prefer\u00eancia.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;pre&gt;&lt;html&gt;\r\n&lt;head&gt;\r\n    &lt;title&gt;&lt;\/title&gt;\r\n    &lt;meta charset=&quot;utf-8&quot; \/&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;select id=&quot;combo1&quot;&gt;\r\n        &lt;option&gt;Selecione&lt;\/option&gt;\r\n    &lt;\/select&gt;\r\n    &lt;select id=&quot;combo2&quot;&gt;\r\n        &lt;option&gt;Selecione&lt;\/option&gt;\r\n    &lt;\/select&gt;\r\n\r\n    &lt;script src=&quot;https:\/\/code.jquery.com\/jquery-2.2.0.min.js&quot; type=&quot;text\/javascript&quot;&gt;&lt;\/script&gt;\r\n    &lt;script type=&quot;text\/javascript&quot;&gt;\r\n        \/\/Array de Categoria em JSON puro\r\n        var categorias = &#x5B;\r\n            { &quot;Id&quot;: &quot;1&quot;, &quot;Categoria&quot;: &quot;Linguagem de programa\u00e7\u00e3o&quot; },\r\n            { &quot;Id&quot;: &quot;2&quot;, &quot;Categoria&quot;: &quot;Banco de dados&quot; }]\r\n        \/\/Array de Subcategoria em JSON puro\r\n        var subCategorias = &#x5B;\r\n            { Id: 1, IdCategoria: 1, Nome: &quot;C#&quot; },\r\n            { Id: 2, IdCategoria: 1, Nome: &quot;Java&quot; },\r\n            { Id: 3, IdCategoria: 2, Nome: &quot;SQL Server&quot; },\r\n            { Id: 4, IdCategoria: 2, Nome: &quot;My Sql&quot; }]\r\n\r\n        $(document).ready(function () {\r\n            \/\/Percorre o array de categorias para popular o combo de categorias\r\n            $.each(categorias, function (i, categoria) {\r\n                \/\/Faz o append (adiciona) cada um dos itens do array como options do select de id combo1\r\n                $(&quot;#combo1&quot;).append($('&lt;option&gt;', {\r\n                    \/\/neste caso o value do option vai ser a pripriedade Id (\u00e9 case sensitive, ent\u00e3o cuide da nomenclatura)\r\n                    value: categoria.Id,\r\n                    \/\/no text estou usando a propriedade Categoria dos objetos dentro do array categoria (case sensitive tamb\u00e9m)\r\n                    text: categoria.Categoria\r\n                }))\r\n            })\r\n            \/\/Vai ser acionado cada vez que o combo1 tracar de item selecionado\r\n            $(&quot;#combo1&quot;).change(function () {\r\n                \/\/Pegando o novo valor selecionado no combo\r\n                var categoria = $(this).val()\r\n                carregaCombo2(categoria);\r\n            })\r\n\r\n            \/\/Definir o item selecionado no carregamento da p\u00e1gina\r\n            $(&quot;#combo1&quot;).val(2)\r\n            \/\/carregar o combo2 baseado na categoria selecionada\r\n            carregaCombo2(2)\r\n            \/\/Selecionar a subcategoria passando o id dela\r\n            $(&quot;#combo2&quot;).val(3)\r\n        })\r\n\r\n        function carregaCombo2(categoria) {\r\n            \/\/Fazer um filtro dentro do array de categorias com base no Id da Categoria selecionada no combo1\r\n            var subCategoriasFiltradas = $.grep(subCategorias, function (e) { return e.IdCategoria == categoria; });\r\n            \/\/Faz o append (adiciona) cada um dos itens do array filtrado no combo2\r\n            $(&quot;#combo2&quot;).html('&lt;option&gt;Selecione&lt;\/option&gt;');\r\n            $.each(subCategoriasFiltradas, function (i, subcategoria) {\r\n                $(&quot;#combo2&quot;).append($('&lt;option&gt;', {\r\n                    value: subcategoria.Id, \/\/Id do objeto subcategoria\r\n                    text: subcategoria.Nome \/\/Nome da Subcategoria\r\n                }))\r\n            })\r\n        }\r\n\r\n    &lt;\/script&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Combobox, DropDownList, Select, enfim, como queira chamar. Preparei um artigo mostrando como carregar os options de um select dinamicamente utilizando apenas JSON, sem chamadas Ajax. <span class=\"ellipsis\">&hellip;<\/span> <span class=\"more-link-wrap\"><a href=\"http:\/\/gianfratti.com\/index.php\/combobox-dinamico-com-json-e-jquery-sem-requisicao-ajax\/\" class=\"more-link\"><span>Read More &rarr;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,12],"tags":[115,74],"class_list":["post-678","post","type-post","status-publish","format-standard","hentry","category-front-end","category-jquery","tag-combo","tag-jquery"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=678"}],"version-history":[{"count":5,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/678\/revisions"}],"predecessor-version":[{"id":700,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/678\/revisions\/700"}],"wp:attachment":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=678"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}