2013-03-04 88 views
1

哎,所以我有这样的HTML(通过PHP环路输出):禁用选择(如果可用)只有一个选项

<select class="dropdown" id="pa_genre" name="attribute_pa_genre"> 
    <optgroup label="Choose an option:"></optgroup> 
    <option value="sport" selected="selected">Sport</option> 
</select> 

而且这个jQuery(从Disable a <select /> if there is only one <option /> with jQuery拍摄):

$(document).ready(function(){ 
    var $sca = $("select.dropdown"); 
    if ($sca.find("option").length <= 1) { 
     $sca.prop('disabled', true); 
    } 
}); 

但不能得到它的工作..我有一个以上的下拉页面与同一类(因此为什么瞄准类没有id)。我改变了attrprop,因为我敢肯定它的新版本,并attr不再使用..

+0

看起来像它的做工精细[这里] (http://jsfiddle.net/BTpB9/) – 2013-03-04 01:25:26

+0

@AndrewWhitaker是的,但我会有这样的事情:http://jsfiddle.net/BTpB9/2/ – Ahhhhhhhhhhhhhdfgbv 2013-03-04 01:27:22

+1

我认为逻辑可能有点缺陷,如果你在页面上有两个select.dropdown元素,每个元素都有一个选项,那么$ sca.find('option')的结果将是2,即两者都不会被禁用。我会在初始选择器上使用每一个,以便一次处理每一个 – OJay 2013-03-04 01:29:54

回答

1

当你有一个以上的输入,你需要某种形式的迭代相应地设置自己的disabled属性。

$("select.dropdown").prop('disabled', function() { 
    return $('option', this).length < 2; 
}); 

Fiddle

上述具有相同的效果:

$("select.dropdown").each(function() { 
    this.disabled = $('option', this).length < 2; 
}); 

的片段的两个以上将自动设置disabledfalse当选择具有2点或更多的选择。如果让一个有意义的差异,你可以使用这个片段与< 2个选项来禁用选择不自动重新启用选择具有> = 2种选择:

$("select.dropdown").each(function() { 
    if ($('option', this).length < 2) this.disabled = true; 
}); 

Fiddle

+0

干杯!作品:] – Ahhhhhhhhhhhhhdfgbv 2013-03-04 01:29:53

+0

没问题,更简单的等价物更容易理解。 ':P' – 2013-03-04 01:35:41

相关问题