2011-07-05 70 views
6

我试图禁用按钮 - 使用jQuery 1.4.4在IE禁用IE6,IE7,IE8中的按钮?

jQuery('#id').attr("disabled", true);

下面的代码随着

<button id="id" type="button" 
    class="some-class" 
    disabled="">Comment</button> 

在FF,铬等,当然还有HTML,在IE中不起作用?我该如何解决?

<button disabled="disabled">似乎不工作在IE或?

编辑:还注意<button id='id' disabled>foobar</button>是有效的HTML

+3

+1“当然” – 2011-07-05 15:36:17

+0

@WTP :) - IE只是爱* PI#$&*纳克关闭您 – Tom

+1

天@汤姆:我知道你的感受。如果你看到雷德蒙在新闻中着火,给我打电话 - 我会去拿一些汽油。 – Bojangles

回答

16

XML/HTML属性值都是字符串。值“真”和“假”have no special meaning (technically, they aren't even allowed)。该公约是设置值的属性名称:

jQuery('#id').attr("disabled", "disabled"); 

还要注意,在你的HTML,<button disabled="">就已经禁用按钮。用jQuery就离开了disabled属性或重新启用它:

jQuery('#id').removeAttr("disabled"); 
+0

对不起,但这是不对的。当你试图在JQuery中检查一个复选框时,它的工作的唯一方法是使用$(“input [type = checkbox]”)。attr(“checked”,true); –

+0

@philhag - 它只是我或做了吗?'实际上禁用IE中的按钮? http://jsfiddle.net/kxVRx/9/ – Tom

+0

@Laam Baily这个行为在HTML5标准中是固定的,所以我不确定它是不是正确的。无论如何,'$(“input [type = checkbox]”)。attr(“checked”,“checked”);'[* does * work](http://phihag.de/2011/so/jquery-checked。 HTML)。 – phihag

0

尝试:

jQuery('#id').attr("disabled", "disabled"); 

属性值应该是字符串,而不是布尔

+0

他想禁用,不启用按钮 –

+0

@alex - 我想禁用IE中的按钮 - 问题是,IE似乎不喜欢上面的代码?即用户可以点击并且不会禁用按钮? – Tom

+0

D'oh再次。我今天一直这样做。编辑 – Alex

0

只是一些额外的增值此处发布的答案。

我认为你的措辞有点不合适,而且从外观上看,你想知道如何禁用和重新启用按钮跨浏览器。

disabled属性(如果存在)应始终禁用该元素,而不管其值是什么。建议值为disabled="disabled"

$('#id').attr("disabled", "disabled") 

为了重新启用你要完全消除disabled attrbitute(在其他的答案中指出)的元素。

$('#id').removeAttr('disabled'); 
1

我在IE8中遇到了同样的问题,并且能够解决它们,所以我认为我会加入一些点。 phihag提供的解决方案是正确的和错误的。确实,XML/HTML不会接受真正的布尔值作为属性 - 但我们正在讨论jQuery语法,在这里,它接受布尔值作为参数,并适当地设置属性。

随着禁用和启用输入元件,在IE中,我发现了什么工作,始终如一地,是简单地不“硬编码”的初始期望直接在X/HTML值。如果要从初始渲染中禁用控件,最好在页面呈现后立即调用函数,以禁用它。也许有点混乱,像许多事情一样,它不应该是那样,但那就是最终为我工作的东西。很简单。

希望能帮助别人。我经历了很多调试工作,以确定这一点。

0

这是JQuery API documentation

$(".selector").button("option", "disabled", true); 

它为我的作品,即使在IE 8中使用jQuery UI 1.8.14或更高。在旧版本中,即使在禁用的按钮上也会触发点击事件。因此,在事件中,你必须评估该按钮的disabledness和取消事件:

function clickHandler(event) { 
    if ($(event.currentTarget).button("option", "disabled")) { 
     return false; 
    } 
    // other handle stuff... 
}