【问题标题】:.attr("disabled", "disabled") issue.attr("disabled", "disabled") 问题
【发布时间】:2010-06-09 10:17:33
【问题描述】:

我有这个功能在输入字段中切换禁用的属性:

$('.someElement').click(function(){     
  if (someCondition) {
     console.log($target.prev('input')) // gives out the right object
     $target.toggleClass('open').prev('input').attr('disabled', 'disabled');
  }else{
     $target.toggleClass('open').prev('input').removeAttr('disabled'); //this works
  }
})

removeAttr 工作正常,但是当我需要再次添加禁用时,它什么也不做。我的 console.log 被触发(并返回正确的输入字段),所以我确定我的 if 语句有效。但是当我在 firefox 中使用 firebug 检查 DOM 时,disabled 属性并没有出现。

有人可以帮我吗?

PS:请不要专注于函数或 if 语句本身,它可以正常工作,只是对禁用的 attr 不起作用...

edit:它的输入类型="hidden" 是否可能禁用对隐藏字段不起作用?

【问题讨论】:

  • 你用什么浏览器?你试过另一个吗?
  • 正如 abatishchev 之前问的那样:您是否在另一个浏览器中尝试过并做了同样的事情?
  • 请问可以提供html代码吗!?
  • 我应该签入其他调试工具!!!谢谢大家

标签: jquery firefox firebug


【解决方案1】:

感谢大家的贡献!我发现了问题:

这是一个萤火虫错误!!!

我的代码有效。我已要求 PHP 开发人员将隐藏的输入类型更改为输入类型文本。 禁用的功能有效。但是萤火虫控制台不会更新这个状态!

您可以在这里http://jsbin.com/uneti3/3# 自行测试这个萤火虫错误。感谢 aSeptik 提供示例页面。

更新:2. 2012 年 6 月:FF11 中的 Firebug 仍然存在此错误。

【讨论】:

  • 这实际上并不可取,它只是没有价值的参数,女巫意味着它保持默认。你应该做 disabled="1" 来真正禁用它:/
  • 不,你应该使用 disabled="disabled" 来成为 w3c。如果您阅读我的初始帖子,这正是我的代码所做的
  • 您遇到的问题不是来自 Firebug 没有更新状态,而是您的代码。 aSeptik 的回答是正确的。如果您不相信我,请在 Chrome 或 IE 中运行您的代码。
  • 是的,它是一个 Firefox 错误,它仍然存在于版本 5 中。
  • 天啊,我今天下午很生气,想知道为什么它不起作用。我有 Firebug 1.10.6。
【解决方案2】:

更新

演示:http://jsbin.com/uneti3/3

你的代码错了,应该是这样的:

 $(bla).click(function() { 
        var disable =  $target.toggleClass('open').hasClass('open');
       $target.prev().prop("disabled", disable);
  });

你以错误的方式使用了 toggleClass 函数

【讨论】:

  • 为什么我用错了?我只是指定一个类,它会切换这个类。这个标准工作正常。 (就像 jquery 文档告诉我的那样)。但是我仍然尝试这样做,但它不起作用。
  • jquery 文档与您所做的相反!医生说如果你有陈述,你可以使用一行代码来做同样的事情!查看我的更新!
  • 是的,肯定它不正确,它没有错,我可以使用 addclass 并删除类,但我很懒;P 但这不是问题。问题是即使它改变了,firebug 也不会改变 DOM 中的禁用状态。我的代码有效,我只是没有看到 id 因为我的输入类型被隐藏了。感谢优化的代码,我已经适应了。 +1
  • 在 HTML 属性方面,disabled="true" 不正确。如果disabled 存在,它唯一可能的值是disabled,如disabled="disabled"。如果启用了实体,则完全省略disabled 标记,因此使用jquery 的removeAttr 函数。
  • @Mattygabe:我认为你错过了 jQuery 点; jQuery true/false 用作简写,它只是自动检测和添加/删除(不启用)属性。因此,如果为 true,则该属性将被禁用,如果为 false,则该属性将被删除。
【解决方案3】:

试试这个更新的代码:

$(bla).click(function(){        
  if (something) {
     console.log($target.prev("input")) // gives out the right object
     $target.toggleClass("open").prev("input").attr("disabled", "true");
  }else{
     $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works
  }
})

【讨论】:

  • 这不是toggleClass的正确使用方式!
  • 我刚刚添加了 .attr("disabled", "true");发布功能
【解决方案4】:

我在切换按钮的禁用状态时遇到了类似的问题!触发removeProp('disabled') 后,按钮拒绝再次“禁用”!我找到了一个有趣的解决方案:使用prop("disabled",true) 禁用按钮并使用prop("disabled",false) 重新启用它! 现在我可以根据需要多次切换按钮的“禁用”状态!试试看。

【讨论】:

    【解决方案5】:
    $("#vp_code").textinput("enable");
    $("#vp_code").textinput("disable");
    

    你可以试试

    【讨论】:

    • 试着解释一下为什么你认为这是合适的解决方案
    【解决方案6】:

    试试

    $(bla).click(function(){        
      if (something) {
         console.log("A:"+$target.prev("input")) // gives out the right object
         $target.toggleClass("open").prev("input").attr("disabled", "disabled");
      }else{
         console.log("A:"+$target.prev("input")) // any thing from there for a single click?
         $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works
      }
    });
    

    【讨论】:

      【解决方案7】:

      添加禁用属性

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

      移除禁用属性

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

      【讨论】:

        猜你喜欢
        • 2011-08-28
        • 1970-01-01
        • 2017-09-10
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多