2012-01-30 79 views
40

使用jquery我该如何检查它是否只读?如何检查下拉菜单是否被禁用?

这就是我想..

$("#item").keydown(function (event) { 
    //alert(event.keyCode); 
    if (event.keyCode == 13) { 
     $("#ok").click();    
     if ($('#dropLength').prop("disabled") == false) { 
      $("#dropLength").focus(); 
      return; 
     } 
     if ($('#dropUnit').prop("disabled") == false) { 
      $("#dropUnit").focus(); 
      return; 
     } 
     $("#qty").focus();     
     return ; 
    } 
}); 

的下拉菜单设置使用jQuery也为只读:

if ($('#dropLength').find('option').length <= 1) { 
     $('#dropLength').attr("disabled", "disabled"); 
} 
if ($('#dropUnit').find('option').length <= 1) { 
     $('#dropUnit').attr("disabled", "disabled"); 
} 
+0

通过只读您的意思是禁用? – 2012-01-30 10:53:53

+0

请注意,HTML定义了两个相关但不同的属性:'readonly'和'disabled'。 – 2012-01-30 10:57:01

回答

81

的传统解决方案,1.6之前,将使用.attr并将返回的值作为bool处理。主要问题是返回的类型.attr已更改为string,因此与== true的比较被破坏(请参阅http://jsfiddle.net/2vene/1/(并切换jquery版本))。

随着1.6 .prop被引入,它返回一个bool

不过,我建议使用.is(),作为返回类型为本质bool,如:

$('#dropUnit').is(':disabled'); 
$('#dropUnit').is(':enabled'); 

此外.is()是更自然的(在“自然语言”的条款),并增加多了一个条件简单的属性比较(例如:.is(':last'),.is(':visible'),...请参阅documentation on selectors)。

+0

此答案有错误和误导性的信息。使用JQuery 1.6+的'('#dropLength')。prop(“disabled”)== false'是完全正确的。它工作得很好。@Andreas将'$('#dropLength')。attr(“disabled”)'(它不会返回'false/true')与'$('#dropLength')。prop(“disabled”)混淆。将返回'false/true')。使用'$('#dropLength')。prop(“disabled”)作为布尔值是完全安全的。 http://jsfiddle.net/nsnomatz/ – 2015-01-13 08:30:18

+0

@DougS我绝对不会将'.prop'与'.attr'混淆,因为我对'.attr'的用法是在porpuse上,并且在小提琴中是显式的。正如我在我的回答中提到的那样:返回的类型'.attr'已经更改为'string'(因为属性的值是一个字符串),许多遗留实现依赖于'.attr'(如'.prop '用1.6引入)返回一个'bool'。这也是为什么我永远不会用'.attr'或'.prop'进行显式检查,而是用适当的伪类来执行'.is'的原因。 – 2015-01-13 09:24:28

+0

你会混淆读过你的答案的人,并认为'道具'坏了。它没有坏掉!它工作得很好。原来的问题甚至不使用你所指的代码。他正确使用'prop'。而且现在你已经在你的评论中澄清说你更愿意使用'is'以防万一'prop'将来停止工作。修复你的答案,让人们知道'prop'没有被破坏,并且作为布尔值工作得很好。 – 2015-01-14 08:47:36

-3

这是$(#dropUnit).attr("disabled") == false

+2

- ,而不是xhtml有效,并且从1.7.1开始,如果disabled =“disabled”,这个用法就被打破了......“btw选择器无效! – 2012-01-30 10:58:24

+0

请参阅http://jsfiddle.net/2vene/1/(并切换jquery版本) – 2012-01-30 11:10:19

+3

正确! upvoted你的答案和评论。 – Mike 2012-01-30 11:10:48

5

尝试以下或检查演示disabledreadonly

$('#dropUnit').is(':disabled') //Returns bool 
$('#dropUnit').attr('readonly') == "readonly" //If Condition 

您可以检查jQuery FAQ

1

有两种选择:

首先

您还可以,如果属性值是使用像is()

$('#dropDownId').is(':disabled'); 

使用== true通过检查10。 attr()

$('#dropDownId').attr('disabled'); 

任何你觉得比较适合你,你可以用:)

干杯!

+1

请勿使用'== true'或'==假' - 用法大约被打破了1.6!看到我的答案和测试链接! – 2012-01-30 11:14:56

+0

@Manish这只能用于禁用?我用它来检查启用,它失败了! – hima 2013-09-12 15:31:59

+1

忽略Andreas上面的评论。这部分不正确。他将'attr('disabled')'与'prop('disabled')'混淆了。使用'prop('disabled')'作为布尔值就可以。 – 2015-01-13 08:32:56