如何使用jQuery(IE)删除禁用的属性

我处于这种情况,我必须使用disabled属性来停用我不希望用户编辑的所有输入。

<input disabled="" type="text"> 

渲染

  

要么

  

这在Chrome和FF上工作正常,但在IE上却没有。

现在我试图用javascript删除这些属性(其中disabled =“False”) ,但我没有得到预期的结果。 Againt,它是javascript Chrome和FF的工作原理,但不适用于IE(使用8)。

最后它应该看起来像:

  

要么

  

我的javascript看起来像(我几乎尝试过任何组合):

 $('document').ready(function () { $("input[disabled='false']").each(function(){$(this).attr('disabled', false);}); $("select[disabled='false']").each(function(){$(this).attr('disabled', false);}); $("input[disabled='False']").each(function(){$(this).attr('disabled', false);}); $("select[disabled='False']").each(function(){$(this).attr('disabled', false);}); $("input[readonly='false']").each(function(){$(this).attr('readonly', false);}); $("select[readonly='false']").each(function(){$(this).attr('readonly', false);}); $("input[readonly='False']").each(function(){$(this).attr('readonly', false);}); $("select[readonly='False']").each(function(){$(this).attr('readonly', false);}); $("input[disabled='false']").each(function(){$(this).removeAttr('disabled');}); $("select[disabled='false']").each(function(){$(this).removeAttr('disabled');}); $("input[disabled='False']").each(function(){$(this).removeAttr('disabled');}); $("select[disabled='False']").each(function(){$(this).removeAttr('disabled');}); $("input[readonly='false']").each(function(){$(this).removeAttr('readonly');}); $("select[readonly='false']").each(function(){$(this).removeAttr('readonly');}); $("input[readonly='False']").each(function(){$(this).removeAttr('readonly');}); $("select[readonly='False']").each(function(){$(this).removeAttr('readonly');}); }); 

一个现场的例子: http : //jsfiddle.net/2LNa6/ 更新

你应该在jQuery中使用.prop方法,因为它会为你绕过这些烦人的IE错误进行健全性检查。 我可以看到你正在使用jQuery 1.6,所以这应该工作:

 $('document').ready(function () { //get each input that is disabled $('input').each(function(i, el){ //see if it should be disabled (true|false) var disabled = $(el).data('disabled'); $(el).prop('disabled', disabled); }); }); 

这是更新的jsFiddle,供您查看。

你有一个javascript错误。 添加); 到你的JavaScript的最后一行,它将解决它。

 $('document').ready(function () { $("input[disabled='False']").each(function(){$(this).removeAttr('disabled');}); $("input[disabled='false']").each(function(){$(this).removeAttr('disabled');}); }**)** 

你错过了大括号(用粗体突出显示)

实际的代码应该是

 $('document').ready(function () { $("input[disabled='disabled']").each(function(){$(this).removeAttr('disabled');}); }) 

而不是False,传递禁用。 这应该适用于所有浏览器

使用名为key的属性来标识是否启用输入。 这是代码。 它适用于所有浏览器。

  

您可以尝试jQuery中的filter器选择器和prop方法的组合,以从所有input标记中删除disabled属性:

 $("input").filter(function () { return $(this); }).prop("disabled'", false); 

http://api.jquery.com/filter/