JQuery ile seçilen seçeneğin dizinini al


171

Bir HTML <select>öğesinden seçilen bir seçeneğin bir dizinini nasıl alacağım konusunda biraz kafam karıştı .

On Bu sayfada anlatılan iki yöntem vardır. Ancak, her ikisi de her zaman geri dönüyor -1. İşte benim jQuery kodu:

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

ve html biçiminde

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

Neden bu davranış? Yöntemini selectatarken şu an "hazır" olma şansı var mı change()? Ayrıca, değişen .index()etmek .val()beni daha kafasını karıştıran şey böylece en doğru değerini döndürüyor.


1
Böyle eski bir soru ama asıl sorun, [name=]seçimin idüzerinde olduğu zaman kullanılır . Aşağıdaki [0].selectedIndexve option:selected-answers her ikisi de Tamam.
diynevala

Yanıtlar:


338

İlk yöntemler test ettiğim tarayıcılarda çalışıyor gibi görünüyor, ancak seçenek etiketleri gerçekten tüm tarayıcılardaki gerçek öğelere karşılık gelmiyor, bu nedenle sonuç değişebilir.

selectedIndexDOM öğesinin özelliğini kullanmanız yeterlidir:

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

Güncelleme:

1.6 sürümü jQuery propözellikleri okumak için kullanılabilecek bir yöntem olduğundan:

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

7
Neden [0]?
Joan.bdm

33
@ Joan.bdm jquery'de selectedIndexmülk yok. Ekleme [0], jquery nesnesini özelliği olan bir javascript nesnesine dönüştürür selectedIndex. Bu örnek olmadan çalışmaz[0]
Aram

@JasonL .: selectedIndexbir özelliktir ve karşılık gelen bir özelliği yoktur. attrYöntem ama o sürümden önceki 1.6 den sürümlerinde özelliği okumaya çalışabilir.
Guffa

@Guffa Neden selectedIndexilk seçenekle 0'dan başlamıyor?
adamj

1
@adamj: O zaman yanlış bir şey yapıyorsun. selectedIndexMülkiyet sıfır dayanır. Belgeleri kontrol ettim ve bu konuda gerçekten% 100 emin olmak için kendimi bile denedim.
Guffa

95

Bunu Jquery tarzında çözmenin iyi yolu

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

2
Bu cevabın [0]OP'nin tercih ettiği cevabı gerektirmediğini ve bir python geliştiricisi olarak bu cevabın okunabilirliğini gerçekten takdir edebilirim.
NuclearPeon

4
OP bunu zaten denedi. Kod, sorudaki ilk yöntemle aynıdır.
Guffa

18

User167517 tarafından verilen cevaba göre biraz farklı bir çözüm var. Benim fonksiyonumda hedeflediğim seçme kutusunun kimliği için bir değişken kullanıyorum.

var vOptionSelect = "#productcodeSelect1";

Dizin şu şekilde döndürülür:

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

17

.prop(propertyName)JQuery nesnesindeki ilk öğeden bir özellik almak için işlevi kullanabilirsiniz .

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

Bu, kodunuzu jQuery alanı içinde tutar ve seçilen seçeneği bulmak için bir seçici kullanma seçeneğinden de kaçınır. Daha sonra aşırı yükü kullanarak geri yükleyebilirsiniz:

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

6

bunu dene

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

7
Yeterli jQuery
sohaiby

1
Tüm uyarılar neler?
Beanwah

3
@Beanwah - Bir şeyi test etmenin en iyi yolu! ;)
JoePC

@JoePC hayır onun değil. console.log () daha iyi olacak

@ reiner.luke -;) = facetiousness
JoePC

6

selectedIndex bir JavaScript Seçim Özelliğidir. JQuery için bu kodu kullanabilirsiniz:

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

Seçim kutusunun dizinini JQuery: .prop () yöntemini kullanarak alabilirsiniz

Şuna göz at :

<!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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.