jQuery Converter Selecione para botões de rádio?
-
19-09-2019 - |
Pergunta
Eu estou tentando converter caixas de seleção para os botões de rádio em tempo real usando jQuery, e eu não tenho certeza da melhor maneira.
Exemplo HTML:
<form id="product">
<select name="data[123]">
<option value="1">First</option>
<option value="2">Second</option>
......
<option value="n">xxxxxx</option>
</select>
</form>
Eu quero convertê-lo no carregamento da página usando jQuery para:
<form id="product">
<input type="radio" name="data[123]" value="1" />
<label for="data[123]">First</label><br/>
<input type="radio" name="data[123]" value="2" />
<label for="data[123]">Second</label><br/>
......
<input type="radio" name="data[123]" value="n" />
<label for="data[123]">xxxxxx</label><br/>
</form>
E ele precisa ser dinâmica para que ele fará um loop dinamicamente para cada caixa de seleção e cada dentro de opção (como produtos diferentes têm diferentes opções)
Eu estou tentando descobrir a melhor maneira. Ou para obter uma matriz multidimensional de todos os valores em primeiro lugar e, em seguida, construir os botões de rádio .. ou trocá-los um de cada vez em um loop. Actualmente a tentar o primeiro, mas eu acho que pode ser cismar-lo:
$(document).ready(function(){
//Get Exising Select Options
$('form#product select').each(function(i, select){
$(select[i]).find('option').each(function(j, option){
//alert($(option).text());
option[j] = [];
option[j]['text'] = $(option).text();
option[j]['val'] = $(option).val();
});
});
//Remove Select box
$('form#product select').remove();
});
Alguém já experimentou este ou tem algum segredo caminho / mais fácil de fazê-lo que estou ausente?
Solução
Eu coloquei isso juntos, e testou-o em alguns navegadores, todos parecem lidar bem com isso. Ele vai pegar os dados fora dos elementos <option>
e criar o <input/><label/><br/>
para cada um, em seguida, remover a caixa de seleção.
//Get Exising Select Options
$('form#product select').each(function(i, select){
var $select = $(select);
$select.find('option').each(function(j, option){
var $option = $(option);
// Create a radio:
var $radio = $('<input type="radio" />');
// Set name and value:
$radio.attr('name', $select.attr('name')).attr('value', $option.val());
// Set checked if the option was selected
if ($option.attr('selected')) $radio.attr('checked', 'checked');
// Insert radio before select box:
$select.before($radio);
// Insert a label:
$select.before(
$("<label />").attr('for', $select.attr('name')).text($option.text())
);
// Insert a <br />:
$select.before("<br/>");
});
$select.remove();
});
Outras dicas
Você está no caminho certo. Iterate e recolher os dados selecionados em variáveis ??e fazer o mínimo de chamadas de operação DOM quanto possível (para eficiência) para criar as entradas de rádio.