Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia. Estou com um problema, quero pegar o valor de um select multiple e verificar se existe um certo valor dentro dele, eu consegui pegar os valores, porém está meio 'bugado'.
Quando seleciono as opções em sequencia tipo 1, tipo 2 e tipo 3, só considera o valor do tipo 1, mas se eu seleciono em sequencia tipo 3, tipo 2 e tipo 1, ele seleciona os campos separadamente, como deve ser.
Desde já, Obrigado.
Segue o código
<form name="formulario">
<select id="sel[]" name="sel" multiple="multiple" onclick="altera()">
<option value="1"> tipo 1 </option>
<option value="2"> tipo 2 </option>
<option value="3"> tipo 3 </option>
</select>
</form>
<input type="text" id="agencia_bb" style="display: none;" value="" >
<script>
function altera() {
var form = document.forms['formulario'];
var sel = form.elements['sel'].value;
for(var i = 0; i < sel.length; i++){
var t = sel[i];
console.log(sel[i]);
if(t == '2'){
document.getElementById('agencia_bb').style.display = 'block';
}else{
document.getElementById('agencia_bb').style.display = 'none';
}
}
}
</script>@lucaswxp show cara, agora só estou com uma dúvida. Fiz um if para verificar quando um certo id for selecionado, ele abilitar um novo input. Quando seleciono só o id do if, ele funciona corretamente, porém quando seleciono o id do if mais um id qualquer, no caso selecionar 2 campos ao mesmo tempo, ele não aplica essa regra.
Segue o código
function getSelectValues(select) {
var result = [];
var options = select && select.options;
var opt;
for (var i=0, iLen=options.length; i<iLen; i++) {
opt = options[i];
if (opt.selected) {
result.push(opt.value || opt.text);
if(result == '2')
{
document.getElementById('agencia_bb').style.display = 'block';
}else{
document.getElementById('agencia_bb').style.display = 'none';
}
}
}
return result;
}Luiz,
Isso acontece porque o seu loop não para quando ele encontra o ID desejado.
Tente colocar o break dentro do primeiro IF.
Fechoou. O font ficou assim:
Htlm
<form name="formulario">
<select id="select" name="select[]" multiple="multiple" onclick="getSelectValues(select)">
<option value="1"> tipo 1 </option>
<option value="2"> tipo 2 </option>
<option value="3"> tipo 3 </option>
</select>
</form>
<input type="text" id="agencia_bb" style="display: none;" value="" >
Javascript
function getSelectValues(select) {
var result = [];
var options = select && select.options;
var opt;
for (var i=0, iLen=options.length; i<iLen; i++) {
opt = options[i];
if (opt.selected) {
result.push(opt.value || opt.text);
if(opt.value == '2')
{
document.getElementById('agencia_bb').style.display = 'block';
break;
}
else{
document.getElementById('agencia_bb').style.display = 'none';
}
}
}
return result;
}
Valeu @lucaswxpCara, surgiu algo a mais. Para estilizar o campo multiple select, eu utilizo uma classe do datepicker. Quando eu fui linkar essa classe no <select>, ele parou de funcionar, não retornando mais nenhum valor e não retorna nenhum log de erro console. Sabe o que pode ser? @lucaswxp
Pra pegar somente os <option> selecionados, você vai ter que iterar sobre o atributo "options" do select e checar pela propriedade "selected":
// Return an array of the selected opion values