如何使用JavaScript禁用HTML按钮?

如何使用JavaScript禁用HTML按钮?,javascript,html,Javascript,Html,我已经了解到,只需将disable附加到HTML按钮的标记,而不是作为属性,就可以禁用(使其物理上不可访问),如下所示: <input type="button" name=myButton value="disable" disabled> 由于此设置不是属性,如何通过JavaScript动态添加此设置以禁用以前启用的按钮?如果有名为b:b.disabled=false的按钮对象它仍然是一个属性。将其设置为: <input type="button" name=myBu

我已经了解到,只需将
disable
附加到HTML按钮的标记,而不是作为属性,就可以禁用(使其物理上不可访问),如下所示:

<input type="button" name=myButton value="disable" disabled>


由于此设置不是属性,如何通过JavaScript动态添加此设置以禁用以前启用的按钮?

如果有名为b:
b.disabled=false的按钮对象

它仍然是一个属性。将其设置为:

<input type="button" name=myButton value="disable" disabled="disabled">


。。。是有效的。

它是一个属性,但是是一个布尔值(所以它不需要名称,只需要一个值——我知道,这很奇怪)。您可以在Javascript中设置等效属性:

document.getElementsByName("myButton")[0].disabled = true;
因为此设置不是属性

这是一种属性

有些属性被定义为布尔值,这意味着您可以指定它们的值,而忽略其他所有属性。i、 e.您只包括粗体部分,而不是disabled=“disabled”。在HTML4中,您应该只包含粗体部分,因为完整版本被标记为(尽管现在在编写规范时这种情况不太正确)

从HTML5开始,规则已经改变,现在只包含名称而不包含值。这没有实际的区别,因为名称和值是相同的

也被称为
禁用
,是一个布尔值,它接受

foo.disabled = true;
理论上,您还可以
foo.setAttribute('disabled','disabled')
foo.removeAttribute(“已禁用”)
,但我不相信旧版本的Internet Explorer(当涉及
setAttribute时,这些浏览器臭名昭著地存在缺陷)。

请尝试以下操作:

document.getElementById("id").setAttribute("disabled", "disabled");
禁用

document.getElementById("btnPlaceOrder").disabled = true; 
使能

document.getElementById("btnPlaceOrder").disabled = false; 

我认为最好的办法是:

$("#ctl00_ContentPlaceHolder1_btnPlaceOrder").attr('disabled', true);
它可以跨浏览器正常工作。

此处为文本
<button disabled=true>text here</button>

您仍然可以使用属性。只需使用“disabled”属性而不是“value”。

HTMLInputElement
上设置
disabled
属性的正式方法是:

var input = document.querySelector('[name="myButton"]');
// Without querySelector API
// var input = document.getElementsByName('myButton').item(0);

// disable
input.setAttribute('disabled', true);
// enable
input.removeAttribute('disabled');
虽然对于启用和禁用
HTMLInputElement
来说已经足够了,而且由于IE的历史缺陷
setAttribute
可能更适合于跨浏览器兼容性,但它只起作用,因为
元素
属性会影响
元素
属性。如果设置了属性,则DOM默认使用该属性的值,而不是等效属性的值

属性和属性之间有一个非常重要的区别。true
HTMLInputElement
属性的一个示例是
input.value
,下面演示了阴影的工作原理:

var input=document.querySelector(“#test”);
//该属性按预期工作
console.log('old attribute:',input.getAttribute('value');
//未显式设置属性时,属性等于属性
console.log('old property:',input.value);
//更改输入的value属性
input.value=“我的新值”;
//该属性仍然存在,因为它仍然存在于DOM标记中
console.log('new attribute:',input.getAttribute('value');
//但由于阴影效果,该属性等于设置值
console.log('newproperty:',input.value)

它确实需要一个值,但它不需要这个名称。(奇怪,但却是真的)。@大卫:我记得以前读过,修正了。这确实很奇怪,如果语法高亮显示正确,可能会更有意义:-)有效,但规范说应该避免语法:所有浏览器都查找disabled=“disabled”,我知道规范说要避免它,但设置disabled=“disabled”或checked=“checked”或selected=“selected”从未遇到任何问题…Just don do disabled=“true”…只有一些浏览器会意识到这一点,显然不是所有浏览器都支持它-如果不支持,规范就不会那么明确。顺便说一句,问题是“我如何通过JavaScript动态添加这个”当然,但问题是关于禁用不是一个属性。我的回答是关于消除它,并说你可以把它作为一个属性。您也可以使用DOM属性。由于跨浏览器无法正确依赖此属性,因此应使用等效的属性。更改属性并设置属性这两种操作是否都有意义?或者这只是一种过度使用?在
foo.disabled=true中,什么是
foo
?它是那个按钮的id吗?@stack-一个变量,包含对通过任何方式(例如querySelector)收集的元素的引用,出于某种原因,这对我来说是有效的,即使
$('#btnPlaceOrder')。disabled=false
没有。我使用了
$('#btnPlaceOrder')[0]。禁用=false
,因为jquery选择器似乎返回了一个数组。Shrug.jquery!==javascript。jquery返回一个类似选择器的数组。@levinja,Chilly-$('#btnPlaceOrder').prop('disabled',false);它应该是
prop
,而不是
attr
。问题是寻找本机js解决方案它是
disabled=“disabled”
还是仅仅
disabled
。任何字符串值都相当于
“disabled”
,包括
disabled=“true”
disabled=“false”