【问题标题】:Disable select if only one option available如果只有一个选项可用,则禁用选择
【发布时间】:2013-03-04 09:41:39
【问题描述】:

嘿,我有这个 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)。我将attr 更改为prop,因为我确定它是新版本并且attr 不再使用了..

【问题讨论】:

  • 看起来工作正常here
  • @AndrewWhitaker 是的,但我会有这样的事情:jsfiddle.net/BTpB9/2
  • 我认为逻辑可能有点缺陷,如果页面上有 2 个 select.dropdown 元素,每个元素都有 1 个选项,那么 $sca.find('option' ) 将为 2,即两者都不会被禁用。我会在初始选择器上使用 each,一次处理每个选择器
  • @OJay 很好,这就是为什么我无法弄清楚为什么没有出现错误的原因。

标签: javascript jquery


【解决方案1】:

由于您有多个输入,您需要某种形式的迭代来相应地设置它们的disabled 属性。

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

Fiddle

上面的效果与:

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

上面的两个SN-PS将自动设置 disabled to false当Select具有2个或更多选项时。如果这产生了有意义的差异,您可以使用此 sn-p 禁用具有 = 2 个选项的选择:

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

Fiddle

【讨论】:

  • 没问题,更新了更简单的等价物,也更容易理解。 :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
相关资源
最近更新 更多