Özelliği disabled
birHTMLInputElement
şudur:
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');
@ Kaushar'ın yanıtı , bir etkinleştirmek ve devre dışı bırakmak için yeterli olsa da , IE'ninHTMLInputElement
tarihsel olarak buggy olması nedeniyle tarayıcılar arası uyumluluk için muhtemelen tercih edilebilirsetAttribute
, ancak yalnızca Element
özellikler gölge Element
nitelikleri nedeniyle çalışır . Bir özellik ayarlanmışsa, DOM, eşdeğer özelliğin değeri yerine varsayılan olarak özelliğin değerini kullanır.
Özellikler ve nitelikler arasında çok önemli bir fark vardır. Gerçek bir örneği HTMLInputElement
özelliği olan input.value
ve aşağıda nasıl gölgeleme çalıştığını gösterecektir:
var input = document.querySelector('#test');
// the attribute works as expected
console.log('old attribute:', input.getAttribute('value'));
// the property is equal to the attribute when the property is not explicitly set
console.log('old property:', input.value);
// change the input's value property
input.value = "My New Value";
// the attribute remains there because it still exists in the DOM markup
console.log('new attribute:', input.getAttribute('value'));
// but the property is equal to the set value due to the shadowing effect
console.log('new property:', input.value);
<input id="test" type="text" value="Hello World" />
Gölge niteliklerinin özellikleri olduğunu söylemek budur. Bu kavram, prototype
zincirdeki kalıtsal özellikler için de geçerlidir :
function Parent() {
this.property = 'ParentInstance';
}
Parent.prototype.property = 'ParentPrototype';
// ES5 inheritance
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
function Child() {
// ES5 super()
Parent.call(this);
this.property = 'ChildInstance';
}
Child.prototype.property = 'ChildPrototype';
logChain('new Parent()');
log('-------------------------------');
logChain('Object.create(Parent.prototype)');
log('-----------');
logChain('new Child()');
log('------------------------------');
logChain('Object.create(Child.prototype)');
// below is for demonstration purposes
// don't ever actually use document.write(), eval(), or access __proto__
function log(value) {
document.write(`<pre>${value}</pre>`);
}
function logChain(code) {
log(code);
var object = eval(code);
do {
log(`${object.constructor.name} ${object instanceof object.constructor ? 'instance' : 'prototype'} property: ${JSON.stringify(object.property)}`);
object = object.__proto__;
} while (object !== null);
}
Umarım bu özellik ve nitelikler arasındaki farkla ilgili herhangi bir karışıklığı açıklar.