jQuery - metin denetimiyle seçilen denetimin seçilen değerini ayarlama


530

Bir seçme denetimi var ve bir javascript değişkeninde bir metin dizesi var.

JQuery kullanarak seçme denetiminin seçili öğesini, sahip olduğum metin açıklamasına (sahip olmadığım değerin aksine) öğe olarak ayarlamak istiyorum.

Değere göre ayarlamak oldukça önemsiz olduğunu biliyorum. Örneğin

$("#my-select").val(myVal);

Ama bunu metin açıklaması yoluyla yapmaktan biraz yoruldum. Metin açıklamasından değeri elde etmenin bir yolu olmalı, ama beynim bunu çözmek için çok cuma öğleden sonra.


1
@DanAtkinson aynısını kendim yapmak üzereydi. select'in bu soru ile kesinlikle ilgisi yoktur.
thecoshman

Yanıtlar:


757

Açıklamaya göre jQuery v1.6 + seçin

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

jQuery 1.6'nın altında ve 1.4'e eşit veya daha büyük

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

Bu yaklaşım 1,6'nın üzerinde ancak 1,9'un altında olan sürümlerde çalışacak olsa da 1,6'dan beri kullanımdan kaldırılmıştır. Bu işe yaramaz 1.9+ jQuery.


Önceki sürümler

val() her iki durumu da ele almalıdır.

$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>


6
Bu işe yaramamış gibi geliyor (belirsiz olabilir) ama aslında benim için iyi çalışmalı. Teşekkürler.
DanSingerman

69
JQuery 1.4'ün bu davranışı valueöznitelik belirtilmişse seçmek için değiştirdiğine dikkat edin ve yalnızca valueöznitelik eksikse metne göre seçin . Dolayısıyla bu örnekte $('select').val('Two')1.3.x sürümünde ikinci seçenek seçilecek, ancak 1.4.x sürümünde hiçbir şey yapılmayacaktır.
Crescent Fresh

18
Peki, şimdi 1.4'te yapmanın en iyi yolu nedir?
JR Lawhorne

4
JQuery'nin daha yeni sürümlerinde, .val ('seçenek değil-değer') seçimi ilk seçeneğe sıfırlar.
dland

5
Bu sorunun ilk cevabı 1.3.x çözüm noktası gibi görünüyor stackoverflow.com/questions/3644449/…
DA.

142

Bunu test etmedim, ama bu senin için işe yarayabilir.

$("select#my-select option")
   .each(function() { this.selected = (this.text == myVal); });

90

Metinle myText seçeneği seçmek için bunu deneyin ...

$("#my-Select option[text=" + myText +"]").prop("selected", true);

@ spoulson'un yanıtı benim için çalıştı ... .each olmadan yapmaya çalıştım
Jay Corbett

2
Çoğu durumda, bu yaklaşım maalesef işe yaramaz. Hatta $("#my-Select option[text=" + myText +"]").get(0).selected = true;zaman zaman klasik stile karar vermek zorunda kaldım : (...
Shahriyar Imanov

2
Yeniden ayarlamadan önce seçilen özelliği kaldırdığınızdan emin olun, aksi takdirde çalışmıyor gibi görünecektir (benim için 1.9'da çalışır)
esse

3
@MarkW 1.9 .propiçin .attr; değişikliğin nedeni, 1.9 jQuery'de, .attrbazı DOM özelliklerini ve HTML niteliklerini değiştirmek için kullanmanıza izin veren eski kesmek devre dışı bırakılmış olmasıdır . ( javascript dom properties vs attributes
Ayrımı

JQuery 1.9+ uyumluluğu .prop('selected', true)yerine kullanılacak yanıt güncellendi .attr('selected', 'selected').
erwaman

43

Bunu bu şekilde yapıyorum (jQuery 1.9.1)

$("#my-select").val("Dutch").change();

Not: Değişikliği unutmayın (), bu yüzden uzun süre aramak zorunda kaldım :)


2
Keşke birden fazla kez oy verebilseydim. Onun bir saat bırakma zamanı geçmiş ve şimdi eve gidebilirim.
Bob Jordan

Mükemmel cevap! kısa ve basit ... Bu üstte olmalı ... Oylamaya devam edin.
Muhammed Tarique

Bu benim durumumda çalıştı, teşekkürler! Ancak bu OP'nin istediği gibi görüntülenen metin tarafından değil, OP'nin sahip olmadığı değerin kendisi tarafından mı seçilir?
Brandon Rhodes

21
$("#myselect option:contains('YourTextHere')").val();

metin açıklamanızı içeren ilk seçeneğin değerini döndürür. Bunu test etti ve çalışıyor.


Teşekkürler - Eşleşen metin olmadığında da mantığa ihtiyacım olduğu için bu kullandığım sürüm olabilir ve bu bunu yapabilmek için en kolay mekanizma gibi görünüyor.
DanSingerman

1
unutmayın, yalnızca metiyle eşleşen ilk seçenek için değer alır.
Russ Cam

Buna ek olarak, val () yerine sarılmış kümeye attr ("seçili", "seçili") zincirleme yapabilirsiniz ve bu, CarolinaJay65'in cevabına benzer şekilde çalışır
Russ Cam

1
OP dedi " değer ayarlama " değil " değer alma "
RousseauAlexandre

15

Tüm jQuery sürüm komplikasyonlarını önlemek için, dürüstçe bu gerçekten basit javascript işlevlerinden birini kullanmanızı öneririz ...

function setSelectByValue(eID,val)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].value==val) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

function setSelectByText(eID,text)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].text==text) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

Değer veya metin (seçilen işleve bağlı olarak) yoluyla bir seçim seçeneğinin seçilmesini sağlar. Örneğin: setSelectByValue ('sosis', '2'); Seçim nesnesinde "sosis" kimliğine sahip "2" değerine sahip seçeneği bulur ve seçer.
Dave,

2
@Neal Uh ... soruyu cevaplıyor mu?
Mark Amery

10

Bu eski bir yazı olduğunu biliyorum, ama jQuery 1.10.3 ve yukarıdaki çözümleri kullanarak metin ile seçmek için alamadım. Aşağıdaki kodu (spoulson çözümünün varyasyonu) kullanarak sona erdi:

      var textToSelect = "Hello World";

      $("#myDropDown option").each(function (a, b) {
            if ($(this).html() == textToSelect ) $(this).attr("selected", "selected");
        });

Umarım birine yardımcı olur.


10

Bu hat çalıştı:

$("#myDropDown option:contains(myText)").attr('selected', true);

7
 $("#Test").find("option:contains('two')").each(function(){
     if( $(this).text() == 'two' ) {
        $(this).attr("selected","selected");
     }
 });

İf ifadesi "iki" ve "iki üç" ile tam olarak eşleşmez


Hayır, demek istediğim bu değildi. Yorumumun biraz belirsiz olduğunu düşünüyorum, bu yüzden sadece sildim. Yine de cevabınızı onayladım, çünkü durumum için çalıştı.
Jagd

6

1.7+ ile en kolay yol:

$("#myDropDown option:text=" + myText +"").attr("selected", "selected"); 

1.9+

$("#myDropDown option:text=" + myText +"").prop("selected", "selected"); 

Test edildi ve çalışıyor.


1
1.9 + değil değil. 1.6'dan beri .propDOM özelliklerini değiştirmek için kullanmalısınız .attr(HTML / DOM özellikleri için). Bkz. Stackoverflow.com/q/5874652/1709587
Mark Amery

Ben "seçili" doğruluk değeri yerine ("seçilen", doğru) kullanırdım
mplungjan


4

jquery selectedbox eklentisine bir göz atın

selectOptions(value[, clear]): 

Parametre olarak bir dize $("#myselect2").selectOptions("Value 1");veya normal bir ifade kullanarak seçenekleri değere göre seçin $("#myselect2").selectOptions(/^val/i);.

Ayrıca, önceden seçilmiş seçenekleri de temizleyebilirsiniz: $("#myselect2").selectOptions("Value 2", true);


3

Sadece bir yan notta. Seçtiğim değer ayarlanmadı. Ve tüm internette arama yaptım. Aslında ondan veri alıyordum çünkü bir web servisinden geri arama sonra bir değer seçmek zorunda kaldı.

$("#SelectMonth option[value=" + DataFromWebService + "]").attr('selected', 'selected'); 
$("#SelectMonth").selectmenu('refresh', true);

Yani seçicinin tazelemesi eksik olduğum tek şeydi.


Bu doğru olanı - yine de ... ikinci satır için bir neden göremiyorum. Olduğu gibi çalışmalı.
Sagive SEO

2

Ben attrsizi kullanarak istemediğiniz zaman seçilen birden çok seçenek ile sonuçlandı buldum - çözüm kullanmaktır prop:

$("#myDropDown option:text=" + myText +"").prop("selected", "selected");


1

Yukarıdaki örneklerle ilgili bir sorunum vardı ve sorun, seçim kutusu değerlerimin 6 karakterlik sabit uzunluklu dizelerle önceden doldurulmuş olması, ancak geçirilen parametrenin sabit uzunlukta olmamasıydı.

Ben bir dize, belirtilen uzunlukta ve belirtilen karakter sağ pad olacak bir rpad işlevi var. Bu nedenle, parametreyi doldurduktan sonra çalışır.

$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));


function rpad(pStr, pLen, pPadStr) {
if (pPadStr == '') {pPadStr == ' '};
while (pStr.length < pLen)
    pStr = pStr + pPadStr;
return pStr; 
} 

1
 $('#theYear').on('change', function () {
 FY = $(this).find('option:selected').text();
 $('#theFolders').each(function () {
     $('option:not(:contains(' + FY + '))', this).hide();
 });
 $('#theFolders').val(0);
});

$('#theYear').on('mousedown', function () {
 $('#theFolders option').show().find('option:contains("Select")', this).attr('selected', 'selected');
});

0

Bu kabul edilen cevap doğru görünmüyor, .val ('newValue') işlev için doğru iken, adıyla bir seçim almaya çalışmak benim için çalışmıyor, öğemi almak için kimlik ve sınıf adını kullanmak zorunda kaldım


0

Heres kolay bir seçenek. Sadece liste seçeneğini belirleyin ve metnini seçilen değer olarak ayarlayın:

$("#ddlScheduleFrequency option").selected(text("Select One..."));

-1

Seçim kutusunun alt öğelerini alın; bunlar arasında dolaşmak; istediğinizi bulduğunuzda, seçilen seçenek olarak ayarlayın; döngüyü durdurmak için false döndür.

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.