JavaScript kullanarak seçme kutusu öğesinin değerini programlı olarak nasıl ayarlarım?


420

Aşağıdaki HTML <select>öğesi var:

<select id="leaveCode" name="leaveCode">
  <option value="10">Annual Leave</option>
  <option value="11">Medical Leave</option>
  <option value="14">Long Service</option>
  <option value="17">Leave Without Pay</option>
</select>

leaveCodeParametre olarak numaraya sahip bir JavaScript işlevi kullanarak listedeki uygun seçeneği nasıl seçerim?


farklı yöntemler için performans karşılaştırması için cevabımı görün
Toskan

Yanıtlar:


532

Bu işlevi kullanabilirsiniz:

selectElement('leaveCode', '11')

function selectElement(id, valueToSelect) {    
    let element = document.getElementById(id);
    element.value = valueToSelect;
}

4
Harika cevap, bu seçenekler arasında dolaşmaktan çok daha kolay. Ve standartlara uygun: dev.w3.org/html5/spec/… . Tarayıcı uyumsuzlukları varsa (tabii ki vardır :) Ne olduklarını bilmek çok isterim. Bu genellikle ppk'ye güvendiğiniz bir şeydir, ancak inatla bu konu için yaptığım aramalarda görünmeyi reddediyor.
philo

9
Peki çoklu seçimlere ne dersiniz? Birden fazla seçenek olması durumunda bu işe yaramaz (en azından Chrome 25'te).
Georgii Ivankin

2
@ Ring0 öğesinin işaret ettiği gibi, valueToSelect mevcut olmadığında, kroma boş bir giriş ekler. IE ve firefox ise son seçilen değeri korur.
Karthik Bose

1
IE için not: <seçenek> bir değer = 'valueToSelect' özelliğine sahip olmalıdır. <seçenek> .. </option> içindeki ekran metnini değer olarak kullanamazsınızToSelect
Peter Quiring

4
Değişiklik olayının başlatılması gerekiyorsa, şunları da yapmalısınız:element.dispatchEvent(new Event('change'));
Patrick James McDougle

120

JQuery kullanıyorsanız bunu da yapabilirsiniz:

$('#leaveCode').val('14');

Bu <option>14 değerini seçecektir .


Düz Javascript ile bu iki Documentyöntemle de gerçekleştirilebilir :

  • İle document.querySelectorbir CSS seçicisini temel alan bir öğe seçebilirsiniz:

    document.querySelector('#leaveCode').value = '14'
  • İşlevinin document.getElementById()adından da anlaşılacağı gibi , daha köklü bir yaklaşım kullanarak , bir öğeyi aşağıdakilere dayalı olarak seçmenize izin verir id:

    document.getElementById('leaveCode').value = '14'

Bu yöntemleri ve eylemdeki jQuery işlevini görmek için aşağıdaki kodu kırpılmış olarak çalıştırabilirsiniz:


4
Bu, çoklu seçim için de kullanılabilir; bir dizgi dizisini tek bir dize yerine 'val' işlevine iletmeniz yeterlidir. Bkz. Stackoverflow.com/a/16583001/88409
Triynko

Bunu yaparak $ ('# leaveCode') 'u (' change ', function ()' ı tetiklemenin bir yolu var mı?
Lieuwe

5
$ ( "# leaveCode") val ( "14") değişiklik ()..;
Loren

29
function setSelectValue (id, val) {
    document.getElementById(id).value = val;
}
setSelectValue('leaveCode', 14);

16

Soruyu cevaplamıyor, ancak dizine göre de seçebilirsiniz; burada i, seçmek istediğiniz öğenin dizinidir:

var formObj = document.getElementById('myForm');
formObj.leaveCode[i].selected = true;

Döngü ile görüntüleme değerine göre seçmek için öğeler arasında döngü de yapabilirsiniz:

for (var i = 0, len < formObj.leaveCode.length; i < len; i++) 
    if (formObj.leaveCode[i].value == 'xxx') formObj.leaveCode[i].selected = true;

4
FormObj.leaveCode [i] oluşturmamalı .selected = true; formObj.options [i] .selected = true; ?
David Christopher Reynolds

14

Farklı yöntemleri karşılaştırdım:

Bir seçimin değerinin nasıl ayarlanacağının farklı yollarının JS veya jQuery ile karşılaştırılması

kod:

$(function() {
    var oldT = new Date().getTime();
     var element = document.getElementById('myId');
    element.value = 4;
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId option").filter(function() {
        return $(this).attr('value') == 4;
    }).attr('selected', true);
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId").val("4");
    console.error(new Date().getTime() - oldT);
});

~ 4000 elemanlı bir seçimde çıktı:

  • 1 ms
  • 58 ms
  • 612 ms

Not: Bu testi yapmamın tek nedeni, jQuery'nin listemizde ~ 2000 girişlerle (seçenekler arasında daha uzun metinler olması) çok kötü performans göstermesiydi. Bir val () sonra kabaca 2 s gecikme vardı

Not: Metin değerini değil, gerçek değere bağlı olarak değer ayarlıyorum.


10
document.getElementById('leaveCode').value = '10';

Bu, seçimi "Yıllık İzin" olarak ayarlamalıdır


9

Yukarıdaki JavaScript / jQuery tabanlı çözümleri denedim:

$("#leaveCode").val("14");

ve

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;

Bir orada oldu bir angularjs uygulamadaki tüm gerekli <select> öğesinin .

Hiçbiri işe yaramaz, çünkü AngularJS form doğrulaması tetiklenmez. Doğru seçenek seçili olmasına rağmen (ve formda görüntülenir), giriş geçersiz kaldı ( ng-bozulmamış ve ng-geçersiz sınıflar hala mevcut).

AngularJS doğrulamasını zorlamak için, bir seçenek belirledikten sonra jQuery change () yöntemini çağırın :

$("#leaveCode").val("14").change();

ve

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;
$(leaveCode).change();

Zaten Angular ile yapabildiğinizde neden bunun için jQuery kullanıyorsunuz? Angular'ın kendisini kullanırken, değişikliği tetiklemek için yerleşik destekle değeri ayarlama yeteneğiniz yok mu? (Fikrim yok, React kullanıyorum, bu yazıyı 5 saniye sonra buldum: stackoverflow.com/questions/ 50302062 /… )? Çünkü bu, "sadece bunun için" ek bir ± 30kb kütüphane ile
Angular'ı

3

function foo(value)
{
    var e = document.getElementById('leaveCode');
    if(e) e.value = value;
}


3

Gerekirse en kolay yol:
1) Seçim seçeneğini tanımlayan bir düğmeyi tıklatın
2) Seçim seçeneğinin bulunduğu başka bir sayfaya gidin
3) Bu seçenek değerini başka bir sayfada seçtin

1) düğme bağlantılarınız (örneğin, ana sayfada)

<a onclick="location.href='contact.php?option=1';" style="cursor:pointer;">Sales</a>
<a onclick="location.href='contact.php?option=2';" style="cursor:pointer;">IT</a>

(burada contact.php , belirli seçeneklerin bulunduğu sayfanızdır. Sayfa URL'sinin? seçenek = 1 veya 2 olduğunu unutmayın)

2) bu kodu ikinci sayfanıza koyun (benim durumum contact.php )

<?
if (isset($_GET['option']) && $_GET['option'] != "") {
$pg = $_GET['option'];              
} ?>

3) tıklanan düğmeye bağlı olarak seçenek değerini seçin

<select>
<option value="Sales" <? if ($pg == '1') { echo "selected"; } ?> >Sales</option>
<option value="IT" <? if ($pg == '2') { echo "selected"; } ?> >IT</option>
</select>

.. ve bunun gibi.
Bu, değeri url'deki GET aracılığıyla başka bir sayfaya (seçenek listesi ile birlikte) aktarmanın kolay bir yoludur. Form yok, kimlik yok .. sadece 3 adım ve mükemmel çalışıyor.


1

Neden öğenin kimliği için bir değişken eklemiyor ve onu yeniden kullanılabilir bir işlev haline getirmiyorsunuz?

function SelectElement(selectElementId, valueToSelect)
{    
    var element = document.getElementById(selectElementId);
    element.value = valueToSelect;
}

1

Formunuzun form1 olarak adlandırıldığını varsayalım :

function selectValue(val)
{
  var lc = document.form1.leaveCode;
  for (i=0; i&lt;lc.length; i++)
  {
    if (lc.options[i].value == val)
    {
        lc.selectedIndex = i;
        return;
    }
  }
}

1

Bu çizgiler boyunca bir şey olmalı:

function setValue(inVal){
var dl = document.getElementById('leaveCode');
var el =0;
for (var i=0; i<dl.options.length; i++){
  if (dl.options[i].value == inVal){
    el=i;
    break;
  }
}
dl.selectedIndex = el;
}

0
function selecetElement() {
 var selectedValue = document.getElementById('leaveCode');
 selectedValue.value = "11";
}

2
On altı yaşındaki bir soruya on altı mevcut cevap içeren bir cevap eklerken, cevabınızın hangi yeni yönünü ele aldığını belirtmek çok önemlidir. Yapmazsanız ve değişikliğiniz inceyse, cevapsız olabilir ve yanıtınız geç kopya olarak kaldırılabilir. Yalnızca kod yanıtları, nasıl ve neden çalıştıklarına dair bazı açıklamalar ekleyerek neredeyse her zaman iyileştirilebilir.
Jason Aller

-1

PHP kullanıyorsanız böyle bir şey deneyebilirsiniz:

$value = '11';
$first = '';
$second = '';
$third = '';
$fourth = '';

switch($value) {
            case '10' :
                $first = 'selected';
            break;
            case '11' :
                $second = 'selected';
            break;
            case '14' :
                $third = 'selected';
            break;
            case '17' :
                $fourth = 'selected';
            break;
        }

echo'
<select id="leaveCode" name="leaveCode">
  <option value="10" '. $first .'>Annual Leave</option>
  <option value="11" '. $second .'>Medical Leave</option>
  <option value="14" '. $third .'>Long Service</option>
  <option value="17" '. $fourth .'>Leave Without Pay</option>
</select>';

-1

Büyük olasılıkla bunu istiyorsunuz:

$("._statusDDL").val('2');

VEYA

$('select').prop('selectedIndex', 3); 

8
Bu OP olsa JQuery kullanıyor varsayar
Barry Michael Doyle

2
@BarryMichaelDoyle, Bu değil, çünkü soruların başlığı bile bitiyor using JavaScript.
Iulian Onofrei

-6

Korkarım şu anda bunu test edemiyorum, ama geçmişte her seçenek etiketine bir kimlik vermek zorunda kaldığımı düşünüyorum ve sonra şöyle bir şey yaptım:

document.getElementById("optionID").select();

Bu işe yaramazsa, belki sizi bir çözüme yaklaştırır: P


3
HTMLOptionElement bir bulunmamaktadır select()(tüm HTML öğeleri standart kümesi üzerinde herhangi bir ek yöntem tanımlamaz) yöntemi. Ancak, selectedözelliği true olarak ayarlayabilirsiniz .
MrWhite
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.