Değiştirildiğinde Seç'ten seçilen değeri / metni alın


96
<select onchange="test()" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
</select>

Javascript'te seçilen seçeneğin değerini almam gerekiyor: seçilen değeri veya metni nasıl elde edeceğini bilen var mı, lütfen bunun için nasıl bir işlev yazılacağını söyleyin. Onchange () işlevini seçmek için atadım, bundan sonra ne yapmalıyım?



1
Eğer sadece seçilmiş valueolanı istiyorsanız, optiono zaman ... <select onchange="window.alert(this.value);">... options ... </select>... size sadece onu almalı, daha fazlasını değil.
S0AndS0

Yanıtlar:


114

Bunun için JavaScript veya jQuery kullanın.

JavaScript kullanma

<script>
function val() {
    d = document.getElementById("select_id").value;
    alert(d);
}
</script>

<select onchange="val()" id="select_id">

JQuery kullanma

$('#select_id').change(function(){
    alert($(this).val());
})

.value () modern tarayıcılarda çalışır, ancak gerçekten eski tarayıcılarda çalışmaz. Bakınız bytes.com/topic/javascript/answers/…
Benissimo

2
@PlayHardGoPro Seçilen değer budur. Metni istiyorsanız (örneğin, -Seç- veya İletişim) text: select.textveya jQuery'de kullanırsınız select.text().
ricksmt

Orada jquery sonunda noktalı virgül eksik ... :)
lindhe

JQuery kullanarak $('#select_id option:selected').text()Bu, seçilen seçenek, Seç veya İletişim
metnini döndürecektir

1
vanilya javascript yaklaşımı: document.getElementById("select_id").onchange = (evt) => { console.log(evt.srcElement.value); }
Spencer

44

Bunu Google'da araştırıyorsanız ve olay dinleyicisinin bir öznitelik olmasını istemiyorsanız, şunu kullanın:

document.getElementById('my-select').addEventListener('change', function() {
  console.log('You selected: ', this.value);
});
<select id="my-select">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>


30

function test(a) {
    var x = (a.value || a.options[a.selectedIndex].value);  //crossbrowser solution =)
    alert(x);
}
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>


ne a.valueiçin Aslında bunu destekleyen herhangi bir tarayıcı var mı? sadece kullanamaz mıyız a.options[a.selectedIndex].value?
Anonim

@Anonymous <to get the subj =)
el Dude

27

Değişim işlevine gerek yok. Değeri bir satırda yakalayabilirsiniz:

document.getElementById("select_id").options[document.getElementById("select_id").selectedIndex].value;

Veya daha iyi okunabilirlik için bölün:

var select_id = document.getElementById("select_id");

select_id.options[select_id.selectedIndex].value;

20

Vay canına, cevaplar arasında henüz yeniden kullanılabilir çözümler yok .. Demek istediğim, standart bir olay işleyicisi sadece bir eventargüman almalı ve hiç kimlik kullanmak zorunda kalmamalı .. Kullanırım:

function handleSelectChange(event) {

    // if you want to support some really old IEs, add
    // event = event || window.event;

    var selectElement = event.target;

    var value = selectElement.value;
    // to support really old browsers, you may use
    // selectElement.value || selectElement.options[selectElement.selectedIndex].value;
    // like el Dude has suggested

    // do whatever you want with value
}

Bu işleyiciyi her bir satır içi js ile kullanabilirsiniz:

<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

jQuery:

jQuery('#select_id').on('change',handleSelectChange);

veya vanilya JS işleyici ayarı:

var selector = document.getElementById("select_id");
selector.onchange = handleSelectChange;
// or
selector.addEventListener('change', handleSelectChange);

Ve sahip olduğunuz her selectöğe için bunu yeniden yazmak zorunda değilsiniz .

Örnek pasaj:

function handleSelectChange(event) {

    var selectElement = event.target;
    var value = selectElement.value;
    alert(value);
}
<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>


2
Harika çözüm, kabul edilmelidir. DOM belgesine başvurmadan saf olay öğesini kullanmak, React, Vue veya sadece düz HTML formları gibi birçok ortamda çalışan en esnek yoldur.
VanDavv

8
let dropdown = document.querySelector('select');
if (dropdown) dropdown.addEventListener('change', function(event) {
    console.log(event.target.value);
});

Ok işlevleriyle çalışıyorsanız bu yaklaşım yararlıdır.
Franchy

herhangi bir ok işlevi işlev () {} ile değiştirilebilir, aynı şey
Russell Strauss

aynı değil. thisbir ok işlevinde bağlamını sözcüksel ortamından alır, ancak normal işlevin kendine ait bir özelliği vardır. Bunu
Franchy

6

Kullanım

document.getElementById("select_id").selectedIndex

Veya değeri almak için:

document.getElementById("select_id").value

değeri elde etmenin bu yolu eski tarayıcılarda işe yaramaz, bunun yerine Danny'nin çözümünü kullanın
wlf

5
<script>
function test(a) {
    var x = a.selectedIndex;
    alert(x);
}
</script>
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

uyarıda, seçilen dizinin INT değerini göreceksiniz, seçimi bir dizi olarak ele alacaksınız ve değeri alacaksınız


5

HTML:

<select onchange="cityChanged(this.value)">
      <option value="CHICAGO">Chicago</option>
      <option value="NEWYORK">New York</option>
</select>

JS:

function cityChanged(city) {
    alert(city);
}

4

Merak ediyorum, herkes hakkında gönderi paylaştı valueve alma textseçeneği var ve <option>kimse önermedi label.

Bu yüzden ben de öneriyorum label, tüm tarayıcıların desteklediği

Almak için value(diğerlerinin önerdiği gibi)

function test(a) {
var x = a.options[a.selectedIndex].value;
alert(x);
}

Almak için option text(yani İletişim veya -Seç-)

function test(a) {
var x = a.options[a.selectedIndex].text;
alert(x);
}

VEYA (Yeni öneri)

function test(a) {
var x = a.options[a.selectedIndex].label;
alert(x);
}

HTML

<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2" label=‘newText’>Communication</option>
</select>

Not: optionDeğer 2 için yukarıdaki HTML'de , İletişim yerine newTextlabel döndürür

Ayrıca

Not: Firefox'ta etiket özelliğini ayarlamak mümkün değildir (yalnızca dönüş).


3

Bu eski bir sorudur, ancak insanların DOM'da tekrar arama yapmak yerine bilgileri almak için olay nesnesini kullanmayı neden önermediğinden emin değilim.

OnChange işlevinizdeki olay nesnesine gidin, aşağıdaki örneğe bakın

function test() { console.log(event.srcElement.value); }

http://jsfiddle.net/Corsico/3yvh9wc6/5/

Bu, 7 yıl önceki varsayılan davranış değilse, bugün bunu arayanlar için faydalı olabilir.


2

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>


0

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

-1

Kendi örneğimle açıklamaya çalıştım ama umarım size yardımcı olur. Onchange = "test ()" gerekmez Canlı bir sonuç almak için lütfen kod parçacığını çalıştırın.

document.getElementById("cars").addEventListener("change", displayCar);

function displayCar() {
  var selected_value = document.getElementById("cars").value;
  alert(selected_value);
}
<select id="cars">
  <option value="bmw">BMW</option>
  <option value="mercedes">Mercedes</option>
  <option value="volkswagen">Volkswagen</option>
  <option value="audi">Audi</option>
</select>


Bir seçeneği seçmek kanserli olmadığından değişim durumunda tıklama olayından çok daha iyidir.
Riley Carney

@RileyCarney, js kısmındaki fonksiyon adı değişikliğine bağlı olarak ui kısmındaki yeniden düzenleme kodunu değiştirmek yerine, daha zarif ve btw herhangi bir tıklama olayı görmedim.

Onclick olayını kaldırmak için düzenlediniz haha. Çok gölgeli, siz tıklamadan önce, araba için üzerine tıkladıysanız bildirimde bulunan. edited 7 hours agoEn azından iyi çalışmayan kodu düzelttiniz.
Riley Carney
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.