2010-10-25 39 views
16

Tôi đã googled và thử một số cách để làm điều này nhưng không có gì làm việc cho tôi cho đến nay. Những gì tôi đang tìm kiếm là khá đơn giản: Tôi muốn để có thể cho biết liệu một dropdown có một giá trị được lựa chọn hay không. Vấn đề là selectedIndex,: đã chọn, val(), vv làm trả lại kết quả cho các trường hợp sau đây:JS/Jquery: làm thế nào để kiểm tra xem thả xuống đã lựa chọn giá trị?

<select> 
<option value="123">123</option> 
<option value="234">234</option> 
</select> 

Rõ ràng là trình duyệt sẽ hiển thị danh sách thả xuống này với tùy chọn 123 được lựa chọn nhưng nó sẽ được lựa chọn chỉ vì không có tùy chọn nào khác, trong thực tế, trình đơn thả xuống này không có giá trị được chọn vì không có thuộc tính "được chọn". Vì vậy, về cơ bản tôi đang cố gắng tìm cách kể ngoài menu thả xuống trên từ một

<select> 
<option selected value="123">123</option> 
<option value="234">234</option> 
</select> 

Trả lời

19
var hasValue = ($('select > [selected]').length > 0); 

Ngoài ra,

var hasValue = $('select').has('[selected]'); 
+0

Được thực hiện tốt đẹp; một giải pháp lý tưởng. –

+0

Tùy chọn đầu tiên hoạt động tốt, cảm ơn bạn vì điều này. –

+0

Thứ hai không làm việc cho tôi, nhưng thứ nhất là hoàn hảo. –

2

giải pháp này nhanh:

<select> 
<option selected></option> 
<option value="123">123</option> 
<option value="234">234</option> 
</select> 

Sau đó xem nếu bạn có một .val()

+0

Trong khi điều này sẽ làm việc, nó không phải là một giải pháp, đó là một cách giải quyết :) Đáng tiếc là tôi đang đối phó với một ứng dụng đã tồn tại ở đâu không có phần tử trống đầu tiên – Eugene

+0

@Eugene - ohh boo! '$ ('select option'). đầu tiên(). before (" ");'? haha. – Jason

0

Theo như tôi có thể cho biết, không có sự khác biệt về chức năng giữa hai ví dụ của bạn. Về cơ bản, trình duyệt sẽ tự động chọn option đầu tiên.

Xem, ví dụ, kết quả của

$('option:selected') 

trên ví dụ đầu tiên của bạn.

Nếu bạn thực sự muốn ngăn điều này xảy ra, bạn có hai tùy chọn. Đầu tiên là giới thiệu một phần tử trống, mới vào số select, theo câu trả lời của Jason. Tùy chọn khác là bỏ chọn giá trị được chọn tự động:

$(document).load(function(){ 
    $('option:selected').attr('selected', false); 
}); 

Điều này sẽ xóa lựa chọn này. Bất kỳ kết quả nào của $('select').val() không phải là chuỗi trống sẽ do người dùng thay đổi.

-1

này nên làm việc:

if($('#mySelect').find('[defaultSelected]').size()>0){/*do your stuff*/} 
1

Câu trả lời đã được phê duyệt dường như không làm việc cho tôi.

Sau đây là cách tôi làm điều đó để kiểm tra xem tất cả các tùy chọn chọn được chọn:

if($('select option:selected').length > 0) { 
/* Do your stuff here */ 
} 
Các vấn đề liên quan