Como passar parâmetros no onChange of html select


198

Sou iniciante em JavaScript e jQuery. Quero mostrar uma caixa de combinação-A, que é um HTML <select>com o idconteúdo selecionado e o outro local em onChange ().

Como posso passar a caixa de combinação completa com sua seleção ide como posso passar outros parâmetros em chamas do evento onChange?


5
você pode postar algum código, por favor?
KJYe.Name葉家仁

Respostas:


371

function getComboA(selectObject) {
  var value = selectObject.value;  
  console.log(value);
}
<select id="comboA" onchange="getComboA(this)">
  <option value="">Select combo</option>
  <option value="Value1">Text1</option>
  <option value="Value2">Text2</option>
  <option value="Value3">Text3</option>
</select>

O exemplo acima fornece o valor selecionado da caixa de combinação no evento OnChange .


Obrigado, isso funcionou para mim. Basicamente, eu quero mostrar a mesma caixa de combinação em local diferente, então eu dei 2 identificações diferentes para 2 caixas de combinação. Qualquer ajuda será muito apreciada.
Gendaful 17/02

13
Uma maneira mais sucinta para recuperar o valor dentro getComboA()évar value = sel.value;
Yony

4
O evento de alteração é acionado apenas se a caixa de seleção perder o foco. Existe uma maneira de disparar o evento imediatamente após a alteração de um valor?
DoABarrelRoll721

2
usar this.value vez e ele vai trabalhar =) enviando este é o envio de todo o elemento select
Colin Rickels

Para o meu caso, o código está funcionando no Firefox, mas não no Chrome.
avijit bhattacharjee

50

Outra abordagem que pode ser útil em algumas situações, é passar o valor do selecionado <option />diretamente para a função assim:

function myFunction(chosen) {
  console.log(chosen);
}
<select onChange="myFunction(this.options[this.selectedIndex].value)">
  <option value="1">Text 1</option>
  <option value="2">Text 2</option>
</select>


1
Era exatamente disso que eu precisava. Já tinha uma função javascript que alterava as imagens das cores ao clicar em amostras de cores. Mas tinha um pedido para que ele funcionasse também no menu suspenso do PayPal. Usei isso, mas em vez de usar 'value' (já que eu precisava dele para Paypal), adicionei um 'label' a cada opção com os nomes de variáveis ​​que usei para alterar as fotos. Funcionou perfeitamente! Obrigado!!
FlashNoob468

5
Isso é legal. Outra opção válida e mais simples é: <select onChange = "myFunction (this.value)">
Daniel Silva

1
Útil para acessar outros atributos da opção selecionada.
Cees Timmerman 20/03

31

Para saber como fazer isso no jQuery:

<select id="yourid">
<option value="Value 1">Text 1</option>
<option value="Value 2">Text 2</option>
</select>

<script src="jquery.js"></script>
<script>
$('#yourid').change(function() {
  alert('The option with value ' + $(this).val() + ' and text ' + $(this).text() + ' was selected.');
});
</script>

Você também deve saber que Javascript e jQuery não são idênticos. jQuery é um código JavaScript válido, mas nem todo JavaScript é jQuery. Você deve procurar as diferenças e verificar se está usando a apropriada.


2
Eu tentei isso, mas a função de alteração não está sendo chamada, mesmo se eu colocar no método document.ready. Meu código é htmlData.push ('<select id = "choose" name = "choose">'); $ ('# escolher'). change (function () {alert ('change called'); alert ('A opção com valor' + $ (this) .value () + 'e text' + $ (this). text () + 'foi selecionado.'); Por favor, ajude-me com isso.
Gendaful 17/02

@ Gendaful: htmlData.push($('<select id="choose" name="choose">'));deve fazer o truque (você pressionou uma string em vez de um nó completo antes). > 6 anos se passaram ...
Johannes

6

Solução JavaScript

<select id="comboA">
<option value="">Select combo</option>
<option value="Value1">Text1</option>
<option value="Value2">Text2</option>
<option value="Value3">Text3</option>
</select>
<script>
 document.getElementById("comboA").onchange = function(){
    var value = document.getElementById("comboA").value;
 };
</script>

ou

<script>
 document.getElementById("comboA").onchange = function(evt){
    var value = evt.target.value;
 };
</script>

ou

<script>
 document.getElementById("comboA").onchange = handleChange;

 function handleChange(evt){
    var value = evt.target.value;
 };
</script>

Esta é a solução mais geral e abrangente aqui. Obrigado!
divs1210 13/06

5

Achei a resposta do @ Piyush útil, e apenas para adicionar a ela, se você criar programaticamente um select, existe uma maneira importante de obter esse comportamento que pode não ser óbvio. Digamos que você tenha uma função e crie uma nova seleção:

var changeitem = function (sel) {
  console.log(sel.selectedIndex);
}
var newSelect = document.createElement('select');
newSelect.id = 'newselect';

O comportamento normal pode ser dizer

newSelect.onchange = changeitem;

Mas isso realmente não permite que você especifique esse argumento transmitido; portanto, você pode fazer o seguinte:

newSelect.setAttribute('onchange', 'changeitem(this)');

E você é capaz de definir o parâmetro. Se você fizer isso da primeira maneira, o argumento que você acessará sua onchangefunção dependerá do navegador. A segunda maneira parece funcionar bem entre navegadores.


1
evalNão é necessária sua conversão de cadeia em código semelhante a um mal . Na verdade, newSelect.onchange = changeitem;funciona bem se você reescrever o item de alteração como var changeitem = function () {console.log(this.selectedIndex); };(por exemplo, usando o thisargumento de função em vez de). Ou, deixe changeitemcomo está e escreva newSelect.onchange = function () {changeitem(this); };.
Steve Byrnes

1
newSelect.setAttribute ('onchange', 'changeitem (this)'); - felicidades por isso
ghosh

5

solução jQuery

Como obtenho o valor do texto de uma opção selecionada

Os elementos selecionados geralmente têm dois valores que você deseja acessar.
Primeiro, há o valor a ser enviado ao servidor, o que é fácil:

$( "#myselect" ).val();
// => 1

O segundo é o valor do texto da seleção.
Por exemplo, usando a seguinte caixa de seleção:

<select id="myselect">
  <option value="1">Mr</option>
  <option value="2">Mrs</option>
  <option value="3">Ms</option>
  <option value="4">Dr</option>
  <option value="5">Prof</option>
</select>

Se você deseja obter a string "Mr" se a primeira opção foi selecionada (em vez de apenas "1"), faça o seguinte:

$( "#myselect option:selected" ).text();
// => "Mr"  

Veja também


5

Isso me ajudou.

Para selecionar:

$('select_tags').on('change', function() {
    alert( $(this).find(":selected").val() );
});

Para rádio / caixa de seleção:

$('radio_tags').on('change', function() {
    alert( $(this).find(":checked").val() );
});

3

Você pode tentar o código abaixo

<select onchange="myfunction($(this).val())" id="myId">
    </select>

1

este código uma vez que eu escrevo para apenas explicar o evento onChange de select, você pode salvar esse código como html e ver a saída que funciona. e fácil de entender para você.

<html>
    <head>
        <title>Register</title>
    </head>
    <body>
    <script>
        function show(){
            var option = document.getElementById("category").value;
            if(option == "Student")
                  {
                        document.getElementById("enroll1").style.display="block";
                  }
            if(option == "Parents")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
            if(option == "Guardians")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
        }
    </script>
            <form action="#" method="post">
                <table>
                    <tr>
                        <td><label>Name </label></td>
                        <td><input type="text" id="name" size=20 maxlength=20 value=""></td>
                    </tr>
                    <tr style="display:block;" id="enroll1">
                        <td><label>Enrollment No. </label></td>
                        <td><input type="number" id="enroll" style="display:block;" size=20 maxlength=12 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Email </label></td>
                        <td><input type="email" id="emailadd" size=20 maxlength=25 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Mobile No. </label></td>
                        <td><input type="number" id="mobile" size=20 maxlength=10 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Address</label></td>
                        <td><textarea rows="2" cols="20"></textarea></td>
                    </tr>
                    <tr >
                        <td><label>Category</label></td>
                        <td><select id="category" onchange="show()">    <!--onchange show methos is call-->
                                <option value="Student">Student</option>
                                <option value="Parents">Parents</option>
                                <option value="Guardians">Guardians</option>
                            </select>
                        </td>
                    </tr>
                </table><br/>
            <input type="submit" value="Sign Up">
        </form>
    </body>
</html>

1

Caso alguém esteja procurando uma solução React sem precisar baixar dependências adicionais, você pode escrever:

<select onChange={this.changed(this)}>
   <option value="Apple">Apple</option>
   <option value="Android">Android</option>                
</select>

changed(){
  return e => {
    console.log(e.target.value)
  }
}

Certifique-se de vincular a função alterada () no construtor, como:

this.changed = this.changed.bind(this);

0

Isso funcionou para mim onchange = setLocation($(this).val())

Aqui.

    @Html.DropDownList("Demo", 
new SelectList(ViewBag.locs, "Value", "Text"), 
new { Class = "ddlStyle", onchange = "setLocation($(this).val())" });
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.