Como altero uma opção selecionada em HTML usando JavaScript?

168

Eu tenho menu de opções como este:

<form name="AddAndEdit">
   <select name="list" id="personlist">
      <option value="11">Person1</option>
      <option value="27">Person2</option>
      <option value="17">Person3</option>
      <option value="10">Person4</option>
      <option value="7">Person5</option>
      <option value="32">Person6</option>
      <option value="18">Person7</option>
      <option value="29">Person8</option>
      <option value="28">Person9</option>
      <option value="34">Person10</option>
      <option value="12">Person11</option>
      <option value="19">Person12</option>
   </select>
</form>

E agora eu quero alterar a opção selecionada usando um href. Por exemplo:

<a href="javascript:void(0);"
  onclick="document.getElementById('personlist').getElementsByTagName('option')[11].selected = 'selected';">change</a>

Mas eu quero selecionar a opção com value=11 (Person1), não Person12.

Como altero esse código?

breq
fonte

Respostas:

208

mudança

document.getElementById('personlist').getElementsByTagName('option')[11].selected = 'selected'

para

document.getElementById('personlist').value=Person_ID;
breq
fonte
como isso funciona com vários valores? Por exemplo: document.getElementById('personlist').value=id1,id2não vai funcionar, como gerenciar isso?
utdev
1
@utdev aqui é uma solução para múltipla seleção stackoverflow.com/a/1296068/1251563 dica: você precisa usar um loop
BREQ
Então eu não posso fazer algo como .value = id1, id2ou .value = [array]?
utdev
@utdev infelizmente, não ... Você precisa usar um loop
BREQ
Além disso, você pode obter valor por meio de opções selecionadas sem definir a classe como var id = document.getElementById('personlist').value. Eu usei em resposta diferente, obrigado mesmo assim!
Alper
44

Ferramentas como código JavaScript puro para lidar com o Selectbox:

Compreensão gráfica:

Imagem - A

insira a descrição da imagem aqui


Imagem - B

insira a descrição da imagem aqui


Imagem - C

insira a descrição da imagem aqui

Atualizado - 25 de junho de 2019 | Fiddler DEMO

Código JavaScript:

/**
 * Empty Select Box
 * @param eid Element ID
 * @param value text
 * @param text text
 * @author Neeraj.Singh
 */
function emptySelectBoxById(eid, value, text) {
    document.getElementById(eid).innerHTML = "<option value='" + value + "'>" + text + "</option>";
}


/**
 * Reset Select Box
 * @param eid Element ID
 */

function resetSelectBoxById(eid) {
    document.getElementById(eid).options[0].selected = 'selected';
}


/**
 * Set Select Box Selection By Index
 * @param eid Element ID
 * @param eindx Element Index
 */

function setSelectBoxByIndex(eid, eindx) {
    document.getElementById(eid).getElementsByTagName('option')[eindx].selected = 'selected';
    //or
    document.getElementById(eid).options[eindx].selected = 'selected';
}


/**
 * Set Select Box Selection By Value
 * @param eid Element ID
 * @param eval Element Index
 */
function setSelectBoxByValue(eid, eval) {
    document.getElementById(eid).value = eval;
}


/**
 * Set Select Box Selection By Text
 * @param eid Element ID
 * @param eval Element Index
 */
function setSelectBoxByText(eid, etxt) {
    var eid = document.getElementById(eid);
    for (var i = 0; i < eid.options.length; ++i) {
        if (eid.options[i].text === etxt)
            eid.options[i].selected = true;
    }
}


/**
 * Get Select Box Text By ID
 * @param eid Element ID
 * @return string
 */

function getSelectBoxText(eid) {
    return document.getElementById(eid).options[document.getElementById(eid).selectedIndex].text;
}


/**
 * Get Select Box Value By ID
 * @param eid Element ID
 * @return string
 */

function getSelectBoxValue(id) {
    return document.getElementById(id).options[document.getElementById(id).selectedIndex].value;
}
Neeraj Singh
fonte
1
Ótimo exemplo de como interagir com um select com javascript puro!
Mr.GT
O link para "Fiddler Demo" agora resulta em 404 / Página não encontrada :-(
Genki
A pergunta é "Como altero uma opção selecionada em HTML usando JavaScript?". Você apenas copia / cola um pedaço de código sem responder nada.
Thomas
28

Acredito que a postagem no blog JavaScript Beginners - Selecione uma opção suspensa por valor que possa ajudá-lo.

<a href="javascript:void(0);" onclick="selectItemByValue(document.getElementById('personlist'),11)">change</a>

function selectItemByValue(elmnt, value){

  for(var i=0; i < elmnt.options.length; i++)
  {
    if(elmnt.options[i].value === value) {
      elmnt.selectedIndex = i;
      break;
    }
  }
}
usuario
fonte
7
Você provavelmente deve breaksair do seu loop depois de encontrar o valor selecionado. Economiza tempo se a lista for longa e o valor alvo for um dos primeiros.
daiscog 27/09/13
21

Você também pode alterar o atributo DOM select.options.selectedIndex como este:

function selectOption(index){ 
  document.getElementById("select_id").options.selectedIndex = index;
}
<p>
<select id="select_id">
  <option selected>first option</option>
  <option>second option</option>
  <option>third option</option>
</select>
</p>
<p>
  <button onclick="selectOption(0);">Select first option</button>
  <button onclick="selectOption(1);">Select second option</button>
  <button onclick="selectOption(2);">Select third option</button>
</p>

caspinos
fonte
20
mySelect.value = myValue;

Onde mySelectestá sua caixa de seleção e myValueé o valor para o qual você deseja alterá-la.

Ronnie Royston
fonte
Por que todo mundo não votou nisso, esse é um novo recurso? Só preciso dar suporte a navegadores recentes, mesmo assim, de qualquer maneira.
Antont
2

Você também pode usar o JQuery

$(document).ready(function () {
  $('#personlist').val("10");
}
sunil yaduvanshi
fonte
1
Ou, sem consulta, economizando um monte de sobrecarga desnecessária document.querySelector('#personlist').value=10;,.
Manngo 26/03
2

Se você estiver adicionando a opção com javascript

function AddNewOption(userRoutes, text, id) 
{
    var option = document.createElement("option");
    option.text = text;
    option.value = id;
    option.selected = "selected";
    userdRoutes.add(option);
}
Frank M
fonte
Penso que a pergunta era "Como altero uma opção selecionada em HTML usando JavaScript?"
Manngo 26/03
1

Um índice de matriz começará em 0. Se você quiser o valor = 11 (Pessoa1), você o receberá com a posição getElementsByTagName('option')[10].selected.

Rachana
fonte
0

É um post antigo, mas se alguém ainda estiver procurando uma solução para esse tipo de problema, aqui está o que eu criei:

<script>
  document.addEventListener("DOMContentLoaded", function(e) {
    document.forms['AddAndEdit'].elements['list'].value = 11;
  });
</script>
Tariqul Islam
fonte