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

时间:2011-10-03 16:25:47

标签: jquery internet-explorer attributes

我遇到的情况是我必须使用disabled属性来停用我不希望用户编辑的所有输入。

<input disabled="<%= disableInputs%>" type="text"></input>

渲染

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

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

这在Chrome和FF上运行正常,但在IE上却没有。

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

最后应该看起来像:

<input type="text"></input>

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

我的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/ 更新

4 个答案:

答案 0 :(得分:2)

你应该在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);
    });
});

以下是您要查看的updated jsFiddle

答案 1 :(得分:0)

$('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的属性来标识是否启用输入。这是代码。它适用于所有浏览器。

   <table class="tabla" cellpadding="0" border="0">
            <tr>
                <td>
                    <label>Names</label>
                </td>
                <td>
                    <label>DoB</label>
                </td>
                <td style="width:82px" >
                    <label>Gender</label>
                </td>
            </tr>
            <tr id="HijoCargoRow0">
                <td>
                    <input key="false" id="XXX" name="XXX" style="width:260px" type="text" value="" />
                </td>
                <td>
                    <input class="datepicker" key="true" id="YYY" name="YYY" style="width:70px" type="text" value="" />
                </td>
                <td>
                    <input key="true" id="M" name="ZZZ" type="radio" value="M" /><label for="M">M</label>
                    <input key="true"  id="F" name="ZZZ" type="radio" value="F" /><label for="F">F</label>
                </td>
          </tr>
    </table>

<script>
$(function(){
    $("input[key='true']").each(function(){
        $(this).attr('disabled','disabled')
    });
});

</script>

答案 2 :(得分:0)

您有一个javascript错误。添加);到你的javascript的最后一行,它将修复它。

答案 3 :(得分:0)

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

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

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