Dapatkan indeks opsi yang dipilih dengan jQuery


171

Saya agak bingung tentang cara mendapatkan indeks opsi yang dipilih dari <select>item HTML .

Di halaman ini ada dua metode yang dijelaskan. Namun, keduanya selalu kembali -1. Ini kode jQuery saya:

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

dan dalam 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>
(...)

Kenapa perilaku ini? Apakah ada kemungkinan bahwa selectitu tidak "siap" pada saat menetapkan change()metodenya? Selain itu, mengubah .index()ke .val()adalah mengembalikan nilai yang benar, jadi itulah yang lebih membingungkan saya.


1
Pertanyaan yang sangat lama tetapi masalah sebenarnya adalah [name=]digunakan ketika pilih ada iddi atasnya. The [0].selectedIndexdan option:selected-answers bawah keduanya ok.
— diynevala

Jawaban:


338

Metode pertama tampaknya berfungsi di browser yang saya uji, tetapi tag opsi tidak benar-benar sesuai dengan elemen aktual di semua browser, sehingga hasilnya dapat bervariasi.

Cukup gunakan selectedIndexproperti elemen DOM:

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

Memperbarui:

Karena versi 1.6 jQuery memiliki propmetode yang dapat digunakan untuk membaca properti:

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

7
Mengapa [0]?
— Joan.bdm

33
@ Joan.bdm jquery tidak memiliki selectedIndexproperti. Menambahkan [0]mengkonversi objek jquery ke objek javascript yang memiliki selectedIndexproperti. Contoh ini tidak akan berfungsi tanpa[0]
— Aram

@JasonL .: selectedIndexadalah properti, dan tidak ada atribut yang sesuai. The attrMetode mungkin bekerja untuk membaca properti di versi sebelumnya dari 1,6, tapi tidak dari versi itu.
— Guffa

@ Guffa Ada ide mengapa selectedIndextidak mulai dari 0 dengan opsi pertama?
— adamj

1
@adamj: Maka Anda melakukan sesuatu yang salah. The selectedIndexproperti nol berbasis. Saya memeriksa dokumentasi dan bahkan mencobanya sendiri untuk benar-benar yakin 100% tentang ini.
— Guffa

95

Cara yang baik untuk menyelesaikan ini dengan cara Jquery

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

2
Saya suka bahwa jawaban ini tidak memerlukan [0]jawaban pilihan OP dan sebagai python dev, saya benar-benar dapat menghargai keterbacaan jawaban ini.
— NuclearPeon

4
OP sudah mencobanya. Kode identik dengan metode pertama dalam pertanyaan.
— Guffa

18

Saya punya solusi yang sedikit berbeda berdasarkan jawaban oleh user167517. Dalam fungsi saya, saya menggunakan variabel untuk id dari kotak pilih yang saya targetkan.

var vOptionSelect = "#productcodeSelect1";

Indeks dikembalikan dengan:

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

17

Anda bisa menggunakan .prop(propertyName)fungsi untuk mendapatkan properti dari elemen pertama di objek jQuery.

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

Ini menjaga kode Anda dalam ranah jQuery dan juga menghindari opsi lain menggunakan pemilih untuk menemukan opsi yang dipilih. Anda kemudian dapat mengembalikannya menggunakan kelebihan:

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

6

coba ini

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

7
Tidak cukup jQuery
— sohaiby

1
Ada apa dengan semua peringatan?
— Beanwah

3
@Beanwah - Ini adalah cara terbaik untuk menguji apapun! ;)
— JoePC

@ JoPC no tidak. console.log () akan lebih baik

@ reiner.luke -;) = facetiousness
— JoePC

6

selectedIndex adalah properti Pilih JavaScript. Untuk jQuery Anda dapat menggunakan kode ini:

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

Anda bisa mendapatkan indeks kotak pilih dengan menggunakan: .prop () metode JQuery

Periksa ini :

<!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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.