2012-08-01 83 views
3

我正在处理店面包(所以我没有编辑核心文件的选项),我们有下拉菜单来选择用户想要的前后台为一张名片。某些卡片只有一个选项,所以如果只有一个选项,客户端会隐藏下拉菜单。只有一个非空白选项的jQuery select下拉菜单

简单,对吗?

$("select").each(function(){ 
    var count = $(this).children("option").length; 
    if (count == 1) { 
     // there's only one option, do something 
    } 
}); 

这样的作品,但问题是,系统有时会产生一些的下拉菜单中的空白<option>,所以没什么两个选择,但只有一个“真实”的选项:

<select> 
    <option></option> 
    <option value="Something">A real option</option> 
</select> 

基本上,我需要选择<select> s,只有一个<option>或两个<option> s,其中一个只是空的。

我不能完全包围这种if语句的逻辑,所以如果任何人有任何建议,将不胜感激。

+0

您可能可以将选择器更改为“选项[value]”或“选项:not(:empty)”,具体取决于空的值是否总是空的且没有值和文本 – MrOBrian 2012-08-01 18:05:57

+0

根据例如,是''总是这样吗?如果是这样,您可以删除其标签中没有文字的“

回答

5

您可以使用not方法和:empty选择:

$("select").each(function(){ 
    var count = $(this).find("option").not(':empty').length; 
    if (count == 1) { 
     alert('okay') 
    } 
}); 

DEMO

+0

噢,这是比我更好的解决方案。 – KRyan 2012-08-01 18:07:39

+0

我真的不能相信我以前没有想过那么简单。谢谢! – scferg5 2012-08-01 18:10:13

0

更改您计算它们的方式:

$('select').each(function() { 
    var count = 0; 
    $(this).children('option').each(function() { 
     if ($(this).text()) // true if not empty 
     { 
      ++count; 
     } 
    }); 
    if (count == 1) // count only includes non-empty options 

这应该处理它。