As the element <option>
usually need a text to display and an attribute value
, instead of a array
, the most ideal would be for you to use an object:
const options = {
M: {
0: 'Selecione...',
S: 'Solteiro',
C: 'Casado',
Z: 'Separado',
D: 'Divorciado',
V: 'Viúvo'
},
F: {
0: 'Selecione...',
S: 'Solteira',
C: 'Casada',
Z: 'Separada',
D: 'Divorciada',
V: 'Viúva'
}
}
So that you can access the options for the desired sex dynamically, for example:
const gender = 'M'
options[gender] // Ou somente `options.M`.
const options = {
M: {
0: 'Selecione...',
S: 'Solteiro',
C: 'Casado',
Z: 'Separado',
D: 'Divorciado',
V: 'Viúvo'
},
F: {
0: 'Selecione...',
S: 'Solteira',
C: 'Casada',
Z: 'Separada',
D: 'Divorciada',
V: 'Viúva'
}
}
const gender = prompt('Digite "M" ou "F" e receba as opções dinamicamente...')
const optionsToGender = options[gender]
console.log(optionsToGender)
So we can do something like this:
function changeOptions(gender) {
const options = {
M: {
0: 'Selecione...',
S: 'Solteiro',
C: 'Casado',
Z: 'Separado',
D: 'Divorciado',
V: 'Viúvo'
},
F: {
0: 'Selecione...',
S: 'Solteira',
C: 'Casada',
Z: 'Separada',
D: 'Divorciada',
V: 'Viúva'
}
}
// Escolhemos dinamicamente as opções para o gênero passado como parâmetro:
const optionsToGender = options[gender]
// Selecionamos o `<select>` do estado civil:
const select = document.querySelector('#estado-civil')
// Removemos todas as opções que já estão no `<select>`:
select.innerHTML = ''
// Iteramos sobre todas as opções disponíveis para o gênero selecionado,
// criando as `<option>`s dinamicamente:
for (const [value, text] of Object.entries(optionsToGender)) {
const option = document.createElement('option')
option.textContent = text
option.value = value
select.appendChild(option)
}
}
<label for="gender-m">Masculino:</label>
<input type="radio" name="gender" id="gender-m" value="M" onclick="changeOptions('M')" checked />
<br />
<label for="gender-f">Feminino:</label>
<input type="radio" name="gender" id="gender-f" value="F" onclick="changeOptions('F')" />
<br />
<label for="estado-civil">Estado civil: </label>
<select name="estado-civil" id="estado-civil">
<option value="0">-----</option>
<option value="S">Solteiro</option>
<option value="C">Casado</option>
<option value="Z">Separado</option>
<option value="D">Divorciado</option>
<option value="V">Viúvo</option>
</select>
+1. I liked the way you did to simply exchange the texts of
option
s through the array index. I hadn’t even thought about it...– Luiz Felipe