使用Javascript将禁用的属性添加到输入元素


141

我有一个输入框,希望禁用它,同时隐藏它以避免在移植表单时出现问题。

到目前为止,我有以下代码隐藏我的输入:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide();
});

结果是隐藏的输入:

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

如何将Disabled属性添加到输入中?

Answers:


306

$("input").attr("disabled", true); 截至...我不知道了。

现在是2013年12月,我真的不知道该说些什么。

首先是总是.attr(),然后一直是.prop(),所以我回到这里更新了答案,并使答案更加准确。

然后一年后,jQuery再次改变了主意,我什至不想跟踪它。

长话短说,到目前为止,这是最好的答案:“您可以同时使用这两者,但要视情况而定。”

您应该改为阅读以下答案:https : //stackoverflow.com/a/5876747/257493

其有关此更改的发行说明包括在此处:

.attr()和.prop()均不应用于获取/设置值。请改用.val()方法(尽管使用.attr(“ value”,“ somevalue”)将继续起作用,就像在1.6之前一样。

首选用法摘要

.prop()方法应用于布尔属性/属性以及html中不存在的属性(例如window.location)。所有其他属性(可以在html中看到的属性)都可以并且应该继续使用.attr()方法进行操作。

换句话说:

“ .prop =非文档内容”

“ .attr” =文档内容

……

大家可以在这里学习有关API稳定性的课程吗...


3
+1使更新文本大到足以引起我的注意
Vael Victus 2013年

@VaelVictus没那么快。很遗憾,我在发布此消息后一年又更改了它……我忘记了这个答案。阅读此答案:stackoverflow.com/a/5876747/257493
隐身时间2013年

1
.prop和.attr之间的文档/非文档区别是无穷无尽的,而且我之前从未见过如此简洁的框架。非常感激!
无与伦比的

51

来自我的来源的工作代码:

HTML世界

<select name="select_from" disabled>...</select>

JS世界

var from = jQuery('select[name=select_from]');

//add disabled
from.attr('disabled', 'disabled');



//remove it
from.removeAttr("disabled");

2
作为对来自Google的人的说明,直接来自jQuery的人As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor Paz

16

如果您使用的是jQuery,则有几种不同的方法来设置Disabled属性。

var $element = $(...);
    $element.prop('disabled', true);
    $element.attr('disabled', true); 

    // The following do not require jQuery
    $element.get(0).disabled = true;
    $element.get(0).setAttribute('disabled', true);
    $element[0].disabled = true;
    $element[0].setAttribute('disabled', true);

$element.eq(0)[0].disabled = true;呢 :-P
qwertynl 2013年

1
是的,这对我来说是先进的,我不会为提高性能而走得那么远。
iConnor 2013年

+1。虽然有点多余。如果您要处理NodeList /元素数组,按这样的索引选择它们很愚蠢。迭代或仅选择所需的元素更有意义。

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

以上所有都是完全有效的解决方案。选择最适合您的需求。


1
感谢您提供不需要jQuery的解决方案。
Elias Zamaria

12

您可以获取DOM元素,并直接设置Disabled属性。

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').hide()[0].disabled = 'disabled';
});

或者,如果有多个,则可以each()用来设置所有这些:

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});

5

只需使用jQuery的attr()方法

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');

3
并使用.removeAttr('disabled');
ruhong

2

由于问题是询问如何使用JS进行此操作,因此我提供了一个普通的JS实现。

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.