JQuery'de bir <select> seçimini kaldırmanın en iyi yolu?


219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

Seçeneği zarifçe kaldırmak için jQuery'i kullanmanın en iyi yolu nedir?

Yanıtlar:


348

RemoveAttr kullanın ...

$("option:selected").removeAttr("selected");

Veya Prop

$("option:selected").prop("selected", false)

3
IE 8 altında çalışmaz. Bkz. Stackoverflow.com/questions/7960773/…
Clinton Pierce

60
Bu cevap bir şeyler yapmanın yolu değildir (ve önyükleme için evrensel olarak çalışmaz). Doğru yaklaşımlar .val([])ya .prop("selected", false)- veya aşağı kaydır.
Jon

1
JQuery bunu düzeltmiş olmalı, JQuery 1.7.2 kullanarak IE8 benim için mükemmel çalışıyor.
Mikey G

2
VEYA .val (['']) varsa boş değeri seçin.
Mark

2
$("option:selected").prop("selected", false)bazen çalışmıyor. (jquery v1.4.2 ile krom tarayıcıda çalışmıyor)
Rohit Goyani

163

Burada birçok cevap var ama ne yazık ki hepsi oldukça eski ve bu nedenle güveniyor attr/ removeAttrhangi gerçekten gitmek için yol değil.

@coffeeyesplease, iyi bir çapraz tarayıcı çözümünün

$("select").val([]);

Başka bir iyi çapraz tarayıcı çözümü

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

Burada kendi kendini test ettiğini görebilirsiniz . IE 7/8/9, FF 11, Chrome 19 üzerinde test edilmiştir.


1
Seçme cevabından çok daha iyi, (çapraz tarayıcıda çalışır ve öznitelik kümeleriyle uğraşmayı içermez)
Timothy Groote

1
Tüm seçeneklerin seçimini kaldırmak için mükemmel yanıt . Ancak, belirli seçeneklerin seçimini kaldırmak için gerçekten kullanılamazken, removeAttr bunu yapabilir.
Mikey G

2
@MikeyG: Bu , belirterek Array.indexOfIE <9 için bir polyfill ihtiyacı (veya birçok JS kütüphaneleri sağladığını herhangi eşdeğer yöntemini kullanabilirsiniz).
Jon

1
Sonra HTML'yi kontrol ettiniz $('#select').val([]);mi? Ne yazık ki, bu selected="selected"özellik kaldırılmaz . Sonuç olarak yanlış veri gönderebilir. Bu yaklaşımı önermiyorum!
Fr0zenFyr

1
@ Fr0zenFyr: Önceden seçilmiş bir seçenekle başlar ve fare tıklamasıyla el ile seçimi kaldırırsanız, bu özellik de kaldırılmaz - ve elbette formu göndermenin doğru verileri göndermesi garanti edilir. HTML nitelikleri (başlangıç ​​durumunu belirleyen) ve DOM özellikleri (neyin görüntüleneceğini ve nelerin gönderileceğini belirleyen ) arasında bir fark dünyası vardır . Aslında, özniteliğe odaklanan çözümlerin yanlış olmasının nedeni budur. Öznitelik, özelliğin başlangıç ​​değerini belirler, ancak bu kadarıyla gider.
Jon

24

Sorulmasından bu yana bir süre geçti ve bunu eski tarayıcılarda test etmedim, ancak bana göre çok daha basit bir cevap

$("#selectID").val([]);

.val () seçim için de çalışır http://api.jquery.com/val/


Bu en iyi yol ve aslında çoğu tarayıcıdaki değeri temizler - teşekkürler.
Sagive SEO

Bu yalnızca çoklu seçimlerde kullanılabilir. $("select option").prop("selected", false);evrensel olarak çalışır (çoklu ve tekli seçimlerde).
19'da splashout

23

En Basit Yöntem

$('select').val('')

Ben sadece seçim kendisi üzerinde kullandım ve hile yaptı.

Hattayım jQuery 1.7.1 .


1
Bu çözümle ilgili sadece bir sorunla karşılaştım. Seçenek etiketi hala "seçili" özelliğine sahip olacak
Tamara

@Tamara Gerçekten mi? Kontrol etmedim. Bir şey için "seçili" mi kullanıyorsunuz ve bu sizin için işleri karıştırıyor mu?
Joshua Pinter

19

Şimdiye kadar cevaplar sadece IE6 / 7'de birden fazla seçim için çalışıyor; daha yaygın olan çoklu seçim için şunları kullanmanız gerekir:

$("#selectID").attr('selectedIndex', '-1');

Bu, flyfishr64 ile bağlantılı yazıda açıklanmaktadır. Eğer bakarsanız, 2 durumun nasıl olduğunu göreceksiniz - çoklu / çoklu olmayan. Her ikisini de eksiksiz bir çözüm için değiştirmeyi durduran hiçbir şey yoktur:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");

7

Oh jquery.

Henüz yerel bir javascript yaklaşımı olduğundan, bir tane sağlama ihtiyacını hissediyorum.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

Ve sadece sana göstermek için bu ne kadar hızlı: kriter


JQuery olmadan bu cevap için teşekkür ederiz! :)
Saromase

6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

Bu, her öğeyi tekrarlar ve yalnızca işaretli olanların seçimini kaldırır


5

Hızlı bir google, bu yayını IE'de hem tekli hem de çoklu seçim listeleri için ne yapacağınızı açıklayan buldu . Çözüm de oldukça zarif görünüyor:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 


3
$(option).removeAttr('selected') //replace 'option' with selected option's selector

3

Çözüm için çok teşekkürler.

Tek seçim kombo listesi için çözüm mükemmel çalışıyor. Bunu birçok sitede aradıktan sonra buldum.

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");


2

Başka bir basit yol:

$("#selectedID")[0].selectedIndex = -1


1

Genellikle bir seçim menüsü kullandığımda, her seçeneğin kendisiyle ilişkilendirilmiş bir değeri vardır. Örneğin

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

Şimdi bu seçili özniteliği seçenekten kaldırmaz ama gerçekten istediğim değerdir.


0

Seçiminizde aşağıdakine benzer bir kimlik belirleyin:
<select id="foo" size="2">

Sonra şunları kullanabilirsiniz:
$("#foo").prop("selectedIndex", 0).change();

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.