【问题标题】:How to remove disabled attribute with jQuery (IE) [duplicate]如何使用 jQuery(IE)删除禁用的属性 [重复]
【发布时间】:2011-11-30 01:38:57
【问题描述】:

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

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

渲染

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

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

这在 Chrome 和 FF 上运行良好,但在 IE 上却不行。

现在我正在尝试使用 javascript 删除这些属性 (where disabled="False"),但我没有得到预期的结果。同样,它的 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/ 已更新

【问题讨论】:

  • 应该禁用="disabled"
  • 如果你修复了 jsFiddle 中的选择器和语法错误,它可以在 jsFiddle 中工作:jsfiddle.net/jfriend00/vJ559
  • 我更新了我的问题,我不想删除所有禁用的属性,只删除那些 disabled='False' (diabled='True' 必须保留)

标签: jquery internet-explorer attributes


【解决方案1】:
$('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>

【讨论】:

  • 我更新了我的问题。我忘了复制最后一部分,该代码删除了所有禁用的属性:(
  • 您仍然需要将 false 更改为禁用。它应该被禁用=“禁用”而不是禁用=“假”
  • 但这将删除所有禁用的,即使是禁用的=“True”
  • 只有两种情况。带禁用属性的输入和不带禁用属性的输入。没有像 diabled=false 这样的东西。我不确定您要达到的目标。更具体,我们可以为您提供帮助
  • 在 IE 中它不存在,但在 FF、Chrome 和世界其他地方 disabled='false' 是有意义的。还是我弄错了?
【解决方案2】:

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

【讨论】:

  • 我的错,忘了复制最后一部分
  • 更改您的代码以呈现:。然后将启用禁用控件的 Javascript 更改为 $("input:disabled").each(function(){$(this).removeAttr('disabled');});
【解决方案3】:

您应该在 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 供您查看。

【讨论】:

  • 对不起,它不起作用。 DoB 和 Gender 字段应保持禁用状态,仅应启用名称。此代码启用所有输入。
  • 好吧,我误解了你的意图。我可以看到您可以访问模板标记,因此我建议您将值放在 data- 属性中,然后使用它来设置值。查看我更新的小提琴以查看它的实际效果http://jsfiddle.net/demwunz/9TmRA/9/
  • 那行得通,但如果我最后加载 js 怎么办?如果我这样做,输入将在页面加载时启用,对吗?
  • 是的,这是正确的,或者您可以通过将disabled 添加到每个输入来默认禁用所有这些,然后根据更新的示例http://jsfiddle.net/demwunz/9TmRA/13/ 打开您需要的那些。您甚至可以在加载时将它们全部隐藏在 css 中,并在循环时显示它们。
  • 我想这与我所寻找的很接近。它需要一个额外的步骤,但它会起作用。请更新您的答案以接受它:)
【解决方案4】:

您可以尝试在jQuery 中结合使用filter 选择器和prop 方法来从所有input 标签中删除disabled 属性:

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

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

【讨论】:

  • 我最终所做的是:var disabledText = disableInputs ? "disabled='disabled'" : "";,然后在每种情况下都使用它,就像这样:&lt;input &lt;%= disabledText %&gt; type="text"&gt;&lt;/input&gt;。这不是我想要的,但也许我试图做的事情一开始就不正确。
猜你喜欢
  • 2016-08-11
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2016-05-19
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
相关资源
最近更新 更多