2009-09-29 2 views
0

플레이어의 이름 목록이있는 '선택'드롭 다운이 있는데, 기본적으로 첫 번째 항목 (빈 항목)이 선택되어 있습니다. 사용자가 아래 버튼을 클릭 할 때이 항목의 선택 여부에 대한 간단한 테스트를하고 싶습니다. 이 작품을 완벽하게드롭 다운에서 선택한 항목을 테스트 할 때 첫 번째 방법이 실패하는 이유를 알고 있습니까?

1)

if($("#players option:selected").is(":eq(0)")) 
{ 
    alert("Please select a player!"); 
} 

2)

if($("#players option:eq(0)").is(":selected")) 
{ 
    alert("Please select a player!"); 
} 

솔루션 #하지만 # 1은 항상 true를 돌려 :

나는 두 가지 솔루션을 가로 질러왔다 . 누구나 기술적 이유나 한계에 대해 알고 있습니까?

답장을 보내 주셔서 감사합니다.

답변

3

숫자 1이 항상 참인 이유는 1과 2가 약간 다른 것을하기 때문입니다.

해결 방법 # 1은 "선택한 <option>을 가져온 다음 항상 래핑 된 세트의 첫 번째 위치에 있는지 확인합니다."라는 메시지를 표시합니다. 항상 표시되며 (한 번에 하나의 옵션 만 선택할 수 있습니다).

해결 방법 # 2는 "처음으로 <option>을 가져온 다음 선택한 경우 알려주십시오"라고 말하면 첫 번째 이외의 다른 <option>이 선택되어 있지 않습니다.

편집 :

난 당신이 여기에

if($("#players option:selected").is(":first-child")) 
{ 
    alert("Please select a player!"); 
} 

다음 솔루션의 # 1입니다 찾고 행동하는의 Working Demo 야하는지 생각합니다. /을 URL에 추가하여 코드를 확인하십시오.

+0

꽤 많은 것들이 사라집니다! 고맙습니다! – Zoltan

0

옵션 1은 선택한 옵션 집합 (일반적으로 항상 1 개의 항목이 선택됨)을 반환하고 해당 집합의 첫 번째 요소가 존재하는지 테스트합니다. 항상 그럴 것입니다. (즉, 반환 된 선택한 옵션이 목록의 첫 번째 옵션인지 테스트하지 않고 선택한 옵션의 목록을 가져 와서 해당 옵션이 있는지 확인합니다).

0

:eq(0) 선택자는 집합의 첫 번째 요소를 가져옵니다. 따라서 is 메서드를 호출 할 때 요소가 항상 일치합니다.

관련 문제