2014-10-30 83 views
0

这是我当前的脚本。 else if不起作用。jquery attr无法禁用下拉菜单

$('#groupbyCheckbox').change(function() { 
    if ($("#groupbyDropdown").prop("disabled", true)) { 
    $("#groupbyDropdown").attr('disabled',''); 
    alert('true'); 
    } 
    else if ($("#groupbyDropdown").prop("disabled", false)) { 
    alert(); 
    $("#groupbyDropdown").attr('disabled','disabled'); 
    alert('false'); 
    } 
}); 

additional question. 

$('#newCheckBox').change(function(){ 
     $("#dropDown").empty(); 
     var items = []; 
     $.each(var1, function(key, data) { 
      items.push('<option value='+key+'>'+varlist+'</option>'); 
     }); 
     $("#dropDown").append(items.join('')); 
    }); 
+0

你需要使用'$( “#groupbyDropdown”)。prop('disabled',true);' – 2014-10-30 05:47:24

+0

将参数传递给第二个提醒 – cyan 2014-10-30 05:48:44

+0

第一个if正在工作,但第二个不是。 – superdb 2014-10-30 05:50:39

回答

0

在这两种情况下,您都在设置值而不是获取值。在这里看到:

if ($("#groupbyDropdown").prop("disabled", true)) { 

实际上是设置属性。你想要的是检查它的当前值:

if ($("#groupbyDropdown").prop("disabled") == true) { 

或者干脆:

if ($("#groupbyDropdown").prop("disabled")) { 

同样的原则也适用于else if

else if ($("#groupbyDropdown").prop("disabled", false)) { 

应该是:

else if ($("#groupbyDropdown").prop("disabled") == false) { 

或者干脆:

else if (!$("#groupbyDropdown").prop("disabled")) { 

这就是为什么它从来没有进入else区块 - 你总是将它设置为true事先(与两个ifelse if整个条件将评估为true,反正这样没有真正的检查发生)。

看到一个简单的例子这里(切换复选框禁用状态):http://jsfiddle.net/Lohervar/

+0

它总是如此 – superdb 2014-10-30 05:54:46

+0

不,请参阅我写的示例。 – Shomz 2014-10-30 05:58:30

+0

下面是一个更准确的示例:http://jsfiddle.net/Lohervar/1/ – Shomz 2014-10-30 06:12:47

0

尝试

$('#groupbyCheckbox').change(function() { 
    var isDisable= $("#groupbyDropdown").prop("disabled"); 
    $("#groupbyDropdown").prop("disabled",!isDisable); 
}); 

注:设置禁止属性$( “#groupbyDropdown”).prop( “已禁用” ,真),不回Boolean,它总是返回object

使用if($("#groupbyDropdown").prop("disabled")==false)

+0

谢谢youuuuuuuuuuu。 – superdb 2014-10-30 06:00:15

+0

我在10分钟前写过... – Shomz 2014-10-30 06:01:40

+0

@Downvoter你能为你的投票发表评论吗? – Balachandran 2014-10-30 06:02:11

1

我知道你在试图做的是启用/禁用基于该复选框是否被选中

jQuery(function($) { 
 
    $('#groupbyCheckbox').change(function() { 
 
    $("#groupbyDropdown").prop('disabled', this.checked); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="checkbox" id="groupbyCheckbox" /> 
 
<select id="groupbyDropdown"> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
</select>


在代码中存在多个问题的选择,

  • if条件下,您使用的设置器版本.prop()将始终返回一个jquery对象,因此将永远被truthy
  • 也不应使用.attr()来设置喜欢禁用的属性,你需要使用.prop()
+0

+1这可能正是OP想要做的。 – Shomz 2014-10-30 06:15:26