Ottieni l'indice dell'opzione selezionata con jQuery


171

Sono un po 'confuso su come ottenere un indice di un'opzione selezionata da un <select>elemento HTML .

In questa pagina sono descritti due metodi. Tuttavia, entrambi ritornano sempre -1. Ecco il mio codice jQuery:

$(document).ready(function(){
    $("#dropDownMenuKategorie").change(function(){
        alert($("#dropDownMenuKategorie option:selected").index());
        alert($("select[name='dropDownMenuKategorie'] option:selected").index());
    });
});

e in html

(...)
<select id="dropDownMenuKategorie">
    <option value="gastronomie">Gastronomie</option>
    <option value="finanzen">Finanzen</option>
    <option value="lebensmittel">Lebensmittel</option>
    <option value="gewerbe">Gewerbe</option>
    <option value="shopping">Shopping</option>
    <option value="bildung">Bildung</option>
</select>
(...)

Perché questo comportamento? C'è qualche possibilità che selectnon sia "pronto" al momento di assegnare il suo change()metodo? Inoltre, passare .index()a .val()sta restituendo il giusto valore, quindi questo è ciò che mi confonde ancora di più.


1
Una domanda così vecchia, ma il vero problema è [name=]usato quando la selezione ha idsu di essa. Le risposte [0].selectedIndexe di option:selectedseguito sono entrambe ok.
Diynevala,

Risposte:


338

I primi metodi sembrano funzionare nei browser che ho testato, ma i tag delle opzioni non corrispondono realmente agli elementi reali in tutti i browser, quindi il risultato può variare.

Basta usare la selectedIndexproprietà dell'elemento DOM:

alert($("#dropDownMenuKategorie")[0].selectedIndex);

Aggiornare:

Dalla versione 1.6 jQuery ha il propmetodo che può essere usato per leggere le proprietà:

alert($("#dropDownMenuKategorie").prop('selectedIndex'));

7
Perché il [0]?
Joan.bdm,

33
@ Joan.bdm jquery non ha selectedIndexproprietà. L'aggiunta [0]converte l'oggetto jquery in un oggetto javascript che ha la selectedIndexproprietà. Questo esempio non funzionerà senza[0]
Aram,

@JasonL .: selectedIndexè una proprietà e non esiste un attributo corrispondente. Il attrmetodo potrebbe funzionare per leggere la proprietà nelle versioni precedenti alla 1.6, ma non da quella versione.
Guffa,

@Guffa Qualche idea sul perché selectedIndexnon inizia da 0 con la prima opzione?
Adam

1
@adamj: Allora stai sbagliando qualcosa. La selectedIndexproprietà è basata su zero. Ho controllato la documentazione e l'ho persino provato da solo per esserne sicuro al 100%.
Guffa,

95

Un buon modo per risolverlo in maniera Jquery

$("#dropDownMenuKategorie option:selected").index()

2
Mi piace che questa risposta non richieda la [0]risposta preferita di OP e come sviluppatore di Python, posso davvero apprezzare la leggibilità di questa risposta.
NuclearPeon,

4
L'OP l'ha già provato. Il codice è identico al primo metodo nella domanda.
Guffa,

18

Ho una soluzione leggermente diversa in base alla risposta dell'utente 167517. Nella mia funzione sto usando una variabile per l'id della casella di selezione che sto prendendo di mira.

var vOptionSelect = "#productcodeSelect1";

L'indice viene restituito con:

$(vOptionSelect).find(":selected").index();

17

È possibile utilizzare la .prop(propertyName)funzione per ottenere una proprietà dal primo elemento nell'oggetto jQuery.

var savedIndex = $(selectElement).prop('selectedIndex');

Ciò mantiene il codice all'interno del regno jQuery ed evita anche l'altra opzione di utilizzare un selettore per trovare l'opzione selezionata. È quindi possibile ripristinarlo utilizzando il sovraccarico:

$(selectElement).prop('selectedIndex', savedIndex);

6

prova questo

 alert(document.getElementById("dropDownMenuKategorie").selectedIndex);

7
Non abbastanza jQuery
sohaiby,

1
Cosa c'è con tutti gli avvisi?
Beanwah,

3
@Beanwah - È il modo migliore per testare qualsiasi cosa! ;)
JoePC

@JoePC no non lo è. console.log () farà di meglio

@ reiner.luke -;) =
facetiousness

6

selectedIndex è una proprietà di selezione JavaScript. Per jQuery puoi usare questo codice:

jQuery(document).ready(function($) {
  $("#dropDownMenuKategorie").change(function() {
    // I personally prefer using console.log(), but if you want you can still go with the alert().
    console.log($(this).children('option:selected').index());
  });
});

3

È possibile ottenere l'indice della casella di selezione utilizzando: il metodo .prop () di JQuery

Controllare questo :

<!doctype html>
<html>
<head>
<script type="text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){

});

function check(){
    alert($("#NumberSelector").prop('selectedIndex'));
    alert(document.getElementById("NumberSelector").value);
}
</script>
</head>

<body bgcolor="yellow">
<div>
<select id="NumberSelector" onchange="check()">
    <option value="Its Zero">Zero</option>
    <option value="Its One">One</option>
    <option value="Its Two">Two</option>
    <option value="Its Three">Three</option>
    <option value="Its Four">Four</option>
    <option value="Its Five">Five</option>
    <option value="Its Six">Six</option>
    <option value="Its Seven">Seven</option>
</select>
</div>
</body>
</html>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.