jQuery에서 <select>를 선택 해제하는 가장 좋은 방법은 무엇입니까?


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

jQuery를 사용하여 옵션을 우아하게 선택 해제하는 가장 좋은 방법은 무엇입니까?

답변:


348

removeAttr 사용 ...

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

또는 소품

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

3
IE 8에서는 작동하지 않습니다. stackoverflow.com/questions/7960773/…
Clinton Pierce

60
이 답변은 작업을 수행하는 방법이 아니며 부팅하는 데 보편적으로 작동하지 않습니다. 올바른 접근 방식은 .val([])또는 .prop("selected", false)-아래로 스크롤합니다.
Jon

1
JQuery는이 문제를 해결해야합니다 .JQuery 1.7.2를 사용하는 IE8에서는 완벽하게 작동합니다.
Mikey G

2
또는 빈 값을 선택하려면 .val ([ '']).
Mark

2
$("option:selected").prop("selected", false)때로는 작동하지 않습니다. (jquery v1.4.2 크롬 브라우저에서 작동하지 않음)
Rohit Goyani

163

여기에 많은 답변이 있지만 불행히도 모든 답변은 상당히 오래되어 attr/ / 의존 removeAttr하지 않습니다.

@coffeeyes 좋은 크로스 브라우저 솔루션을 사용하는 것으로 올바르게 언급하십시오.

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

또 다른 좋은 크로스 브라우저 솔루션은

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

여기 에서 자체 테스트를 실행하는 것을 볼 수 있습니다 . IE 7/8/9, FF 11, Chrome 19에서 테스트되었습니다.


1
선택 답변보다 훨씬 낫습니다 (크로스 브라우저에서 작동하며 속성 집합을 망칠 필요가 없습니다)
Timothy Groote

1
모든 옵션 을 선택 해제 한 완벽한 답변 . 그러나 특정 옵션을 선택 취소하는 데 실제로 사용할 수는 없지만 removeAttr은 가능합니다.
Mikey G

2
@MikeyG는 : 이것은 , 그 지적은 Array.indexOfIE <9에 대한 polyfill을 필요로 (또는 당신은 많은 JS 라이브러리가 제공하는 동등한 방법을 사용할 수 있습니다).
Jon

1
후에 HTML을 확인 했습니까 $('#select').val([]);? 불행히도 이것은 selected="selected"속성을 제거하지 않습니다 . 잘못된 데이터가 게시 될 수 있습니다. 이 방법을 권장하지 않습니다!
Fr0zenFyr

1
@ Fr0zenFyr : 미리 선택된 옵션으로 시작하고 마우스 클릭으로 수동으로 선택을 취소하면 속성이 제거되지 않지만 양식을 제출해도 올바른 데이터를 게시 할 수 있습니다. HTML 속성 (초기 상태를 결정)과 DOM 속성 (표시 및 제출 내용을 결정)에 차이가 있습니다. 이것이 속성에 초점을 맞춘 솔루션이 잘못된 이유입니다. 이 속성은 속성의 초기 값을 결정하지만 그 정도까지입니다.
Jon

24

그 이후로 오랜 시간이 걸렸으며 구형 브라우저에서 이것을 테스트하지는 않았지만 훨씬 간단한 대답은 다음과 같습니다.

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

.val ()이 아니라 선택 작동 http://api.jquery.com/val/


이것이 가장 좋은 방법이며 실제로 대부분의 브라우저에서 가치를 지 웁니다. 감사합니다.
Sagive SEO

이것은 다중 선택에서만 작동합니다. $("select option").prop("selected", false);보편적으로 작동합니다 (다중 및 단일 선택).
splashout

23

가장 간단한 방법

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

나는 이것을 단순히 선택 자체에서 사용했고 트릭을 수행했습니다.

나는에있어 jQuery를 1.7.1 .


1
이 솔루션에 대한 한 가지 문제에 직면했습니다. 옵션 태그의 속성은 여전히 ​​"selected"입니다.
Tamara

@Tamara 정말? 나는 확인하지 않았다. 당신은 무언가를 위해 "선택된"을 사용하고 있으며 이것은 당신을 위해 일을 혼란스럽게합니까?
Joshua Pinter

19

지금까지 답변은 IE6 / 7의 다중 선택에 대해서만 작동합니다. 보다 일반적인 비 다중 선택의 경우 다음을 사용해야합니다.

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

이것은 flyfishr64로 연결된 게시물에서 설명됩니다. 그것을 보면, 다중 / 비 다중의 두 가지 경우가 있음을 알 수 있습니다. 완벽한 솔루션을 위해 두 가지를 모두 부르는 것은 아무것도 없습니다.

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

7

오 jquery.

아직 네이티브 자바 스크립트 접근 방식이 있기 때문에 제공해야 할 필요가 있다고 생각합니다.

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

그리고 이것이 얼마나 빠른지 보여 드리기 위해 : 기준


jQuery 없이이 답변에 감사드립니다! :)
Saromase

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

이것은 각 항목을 반복하고 확인 된 항목 만 선택 취소합니다.


5

빠른 구글 IE에서 단일 및 다중 선택 목록 모두에 대해 원하는 작업을 수행하는 방법을 설명하는 이 게시물 을 발견 했습니다 . 이 솔루션은 매우 우아하게 보입니다.

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

}); 



3

솔루션 주셔서 감사합니다.

단일 선택 콤보 목록에 대한 솔루션은 완벽하게 작동합니다. 많은 사이트에서 검색 한 후이 문제를 발견했습니다.

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


2

또 다른 간단한 방법 :

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


1

일반적으로 선택 메뉴를 사용하면 각 옵션에 관련 값이 있습니다. 예를 들어

<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

이제 이것은 옵션에서 선택된 속성을 제거하지 않지만 실제로 원하는 것은 값입니다.


0

다음과 같이 선택에 ID를 설정하십시오.
<select id="foo" size="2">

그런 다음 다음을 사용할 수 있습니다.
$("#foo").prop("selectedIndex", 0).change();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.