【问题标题】:Disable/enable an input with jQuery?使用 jQuery 禁用/启用输入?
【发布时间】:2010-11-27 17:07:49
【问题描述】:
$input.disabled = true;

$input.disabled = "disabled";

标准方法是什么?反之,如何启用禁用的输入?

【问题讨论】:

标签: javascript jquery html-input disabled-input


【解决方案1】:

jQuery 1.6+

要更改disabled 属性,您应该使用.prop() 函数。

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 及以下

.prop() 函数不存在,但 .attr() 类似:

设置禁用属性。

$("input").attr('disabled','disabled');

要重新启用,正确的方法是使用.removeAttr()

$("input").removeAttr('disabled');

在任何版本的 jQuery 中

如果您只处理一个元素,您始终可以依赖实际的 DOM 对象,并且可能比其他两个选项快一点:

// assuming an event handler thus 'this'
this.disabled = true;

使用.prop().attr() 方法的优点是您可以为一堆选定的项目设置属性。


注意:在 1.6 中,有一个 .removeProp() 方法,听起来很像 removeAttr(),但它不应用于像 'disabled' 这样的原生属性文档摘录:

注意:请勿使用此方法删除本机属性,例如选中、禁用或选中。这将完全删除该属性,并且一旦删除,就不能再次将其添加到元素中。使用 .prop() 将这些属性设置为 false。

事实上,我怀疑这种方法有很多合法用途,布尔道具的完成方式是您应该将它们设置为 false,而不是像 1.5 中的“属性”对应物那样“删除”它们

【讨论】:

  • 顺便说一句,请记住,如果您想禁用所有表单输入控件 - 包括。复选框、收音机、文本区域等 - 您必须选择 ':input',而不仅仅是 'input'。后者只选择实际的 元素。
  • @CornelMasson input,textarea,select,button:input 好用一点——:input 作为选择器效率很低,因为它必须选择* 然后遍历每个元素并过滤标记名 - 如果您直接传递 4 个标记名选择器,它会快得多。此外,:input 不是标准的 CSS 选择器,因此 querySelectorAll 可能带来的任何性能提升都将丢失
  • 这只是阻止用户访问它,还是实际上将其从网络请求中删除?
  • 使用.removeProp("disabled") 会导致@ThomasDavidBaker 指出的“属性被完全删除且不再被添加”的问题,在某些浏览器(如Chrome)的情况下,它在Chrome 上运行良好有些像火狐。我们在这里真的应该小心。始终改用.prop("disabled",false)
  • .prop 或 .attr 都不足以禁用锚元素; .prop 甚至不会使“控件”变灰(.attr 会,但 href 仍处于活动状态)。您还必须添加一个调用 preventDefault() 的单击事件处理程序。
【解决方案2】:

只是为了新的约定 && 使其适应未来(除非 ECMA6 发生巨大变化(????):

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

【讨论】:

  • 开玩笑!为什么$(document).on('event_name', '#your_id', function() {...}) 而不是$('#your_id').on('event_name', function() {...})。如jQuery .on() documentation 中所述,前者使用委托并侦听所有 event_name 事件,这些事件冒泡到document,并检查它们是否匹配#your_id。后者仅专门监听 $('#your_id') 事件,并且可以更好地扩展。
  • 前者适用于任何时候插入到 DOM 中的元素,后者仅适用于当时存在的元素。
  • @crazymykl 正确,但您不应添加页面上已存在 id 的元素。
【解决方案3】:
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

有时您需要禁用/启用表单元素,例如 input 或 textarea。 Jquery 通过将禁用属性设置为“禁用”来帮助您轻松实现这一点。 例如:

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

要启用禁用元素,您需要从该元素中删除“禁用”属性或清空它的字符串。例如:

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

参考:http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html

【讨论】:

    【解决方案4】:
    $("input")[0].disabled = true;
    

    $("input")[0].disabled = false;
    

    【讨论】:

    • 当然问题是针对 jQuery 提出的,这会改变纯 JavaScript 中的状态,但它可以工作。
    • 这会改变 JavaScript 中的状态,但它仍然使用 jQuery 选择器来获取第一个输入。
    • 但我不认为我们在这里制作 jquery 百科全书,如果答案有效,那就好
    【解决方案5】:

    您可以将其放在代码中的全局位置:

    $.prototype.enable = function () {
        $.each(this, function (index, el) {
            $(el).removeAttr('disabled');
        });
    }
    
    $.prototype.disable = function () {
        $.each(this, function (index, el) {
            $(el).attr('disabled', 'disabled');
        });
    }
    

    然后你可以写这样的东西:

    $(".myInputs").enable();
    $("#otherInput").disable();
    

    【讨论】:

    • 虽然包装功能很方便,但您应该使用 propnot attrdisabled 属性使其正常工作(假设 jQuery 1.6 或以上)。
    • @TrueBlueAussie 使用attr 的缺点是什么?我在一些项目中使用了上面的代码,据我记得它工作正常
    • 明显的例外是具有幕后属性的控件。最著名的是复选框的checked 属性。使用attr 不会得到相同的结果。
    【解决方案6】:

    您可以通过多种方式启用/禁用任何元素

    方法 1

    $("#txtName").attr("disabled", true);
    

    方法 2

    $("#txtName").attr("disabled", "disabled");
    

    如果您使用的是 jQuery 1.7 或更高版本,请使用 prop(),而不是 attr()。

    $("#txtName").prop("disabled", "disabled");
    

    如果您希望启用任何元素,那么您只需执行与禁用它相反的操作即可。然而 jQuery 提供了另一种删除任何属性的方法。

    方法 1

    $("#txtName").attr("disabled", false);
    

    方法 2

    $("#txtName").attr("disabled", "");
    

    方法 3

    $("#txtName").removeAttr("disabled");
    

    同样,如果您使用的是 jQuery 1.7 或更高版本,请使用 prop(),而不是 attr()。那是。这是您使用 jQuery 启用或禁用任何元素的方式。

    【讨论】:

      【解决方案7】:

      如果您只想反转当前状态(如切换按钮行为):

      $("input").prop('disabled', ! $("input").prop('disabled') );
      

      【讨论】:

      • 谢谢我有一个同样的东西来切换它; $("input").prop('disabled', function(i, v) { return !v; });
      【解决方案8】:

      这样使用,

       $( "#id" ).prop( "disabled", true );
      
       $( "#id" ).prop( "disabled", false );
      

      【讨论】:

        【解决方案9】:

        2018 年更新:

        现在不再需要 jQuery 并且已经有一段时间了,因为 document.querySelectordocument.querySelectorAll(用于多个元素)几乎与 $ 做同样的工作,加上更明确的工作 getElementByIdgetElementsByClassNamegetElementsByTagName

        禁用“输入复选框”类的一个字段

        document.querySelector('.input-checkbox').disabled = true;
        

        或多个元素

        document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);
        

        【讨论】:

        • 这个问题专门询问了关于 jQuery 的问题......但同样你的陈述是正确的,值得知道当有多个元素时,jQuery 不需要 用于此没有了。
        【解决方案10】:

        您可以使用 jQuery prop() 方法来禁用或启用表单元素或使用 jQuery 动态控制。 prop() 方法需要 jQuery 1.6 及以上版本。

        示例:

        <script type="text/javascript">
                $(document).ready(function(){
                    $('form input[type="submit"]').prop("disabled", true);
                    $(".agree").click(function(){
                        if($(this).prop("checked") == true){
                            $('form input[type="submit"]').prop("disabled", false);
                        }
                        else if($(this).prop("checked") == false){
                            $('form input[type="submit"]').prop("disabled", true);
                        }
                    });
                });
            </script>
        

        【讨论】:

          【解决方案11】:

          这对我有用

          $("#values:input").attr("disabled",true);
          $("#values:input").attr("disabled",false);
          

          【讨论】:

            【解决方案12】:

            禁用:

            $('input').attr('readonly', true); // Disable it.
            $('input').addClass('text-muted'); // Gray it out with bootstrap.
            

            启用:

            $('input').attr('readonly', false); // Enable it.
            $('input').removeClass('text-muted'); // Back to normal color with bootstrap.
            

            【讨论】:

              【解决方案13】:

              对输入类型禁用 true:

              在特定输入类型的情况下(例如文本类型输入

              $("input[type=text]").attr('disabled', true);
              

              对于所有类型的输入类型

              $("input").attr('disabled', true);
              

              【讨论】:

              • 感谢这帮助我隔离到输入名称。 $("input[name=method]").prop('disabled', true);
              【解决方案14】:

              另一种禁用输入字段的方法是使用 jQuery 和 css,如下所示:

              jQuery("#inputFieldId").css({"pointer-events":"none"})
              

              要启用相同的输入,代码如下:

              jQuery("#inputFieldId").css({"pointer-events":""})
              

              【讨论】:

                【解决方案15】:
                <html>
                <body>
                
                Name: <input type="text" id="myText">
                
                
                
                <button onclick="disable()">Disable Text field</button>
                <button onclick="enable()">Enable Text field</button>
                
                <script>
                function disable() {
                    document.getElementById("myText").disabled = true;
                }
                function enable() {
                    document.getElementById("myText").disabled = false;
                }
                </script>
                
                </body>
                </html>
                

                【讨论】:

                • 来自审核队列:我可以请求您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
                【解决方案16】:

                我使用了@gnarf 答案并将其添加为函数

                   $.fn.disabled = function (isDisabled) {
                     if (isDisabled) {
                       this.attr('disabled', 'disabled');
                     } else {
                       this.removeAttr('disabled');
                     }
                   };
                

                然后这样使用

                $('#myElement').disable(true);
                

                【讨论】:

                  【解决方案17】:

                  2018,没有 JQuery (ES6)

                  禁用所有input

                  [...document.querySelectorAll('input')].map(e => e.disabled = true);
                  

                  id="my-input"禁用input

                  document.getElementById('my-input').disabled = true;
                  

                  问题是使用 JQuery,仅供参考。

                  【讨论】:

                    【解决方案18】:

                    方法4(这是wild coder answer的扩展)

                    txtName.disabled=1     // 0 for enable
                    &lt;input id="txtName"&gt;

                    【讨论】:

                      【解决方案19】:

                      在 jQuery Mobile 中:

                      禁用

                      $('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
                      $('#someTextElement').textinput().textinput('disable');
                      

                      启用

                      $('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
                      $('#someTextElement').textinput('enable');
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-01-05
                        • 2021-11-20
                        • 2012-08-26
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-06-16
                        相关资源
                        最近更新 更多