Làm cách nào để tắt nút HTML bằng JavaScript?


185

Tôi đã đọc rằng bạn có thể vô hiệu hóa (làm cho vật lý không thể nhìn thấy) một nút HTML chỉ bằng cách thêm disablevào thẻ của nó, nhưng không phải là một thuộc tính, như sau:

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

Vì cài đặt này không phải là một thuộc tính, làm cách nào tôi có thể thêm động này thông qua JavaScript để tắt nút đã được bật trước đó?

Câu trả lời:


273

Vì cài đặt này không phải là một thuộc tính

Nó là một thuộc tính.

Một số thuộc tính được định nghĩa là boolean, có nghĩa là bạn có thể chỉ định giá trị của chúng và bỏ qua mọi thứ khác. tức là Thay vì bị vô hiệu hóa = " bị vô hiệu hóa ", bạn chỉ bao gồm phần in đậm. Trong HTML 4, bạn chỉ nên bao gồm phần in đậm vì phiên bản đầy đủ được đánh dấu là một tính năng có hỗ trợ hạn chế (mặc dù điều đó bây giờ ít đúng hơn khi thông số kỹ thuật được viết).

Kể từ HTML 5, các quy tắc đã thay đổi và bây giờ bạn chỉ bao gồm tên và không bao gồm giá trị. Điều này làm cho không có sự khác biệt thực tế bởi vì tên và giá trị là như nhau.

Các bất động sản DOM cũng được gọi disabledvà là một boolean mà mất truehay false.

foo.disabled = true;

Về lý thuyết, bạn cũng có thể foo.setAttribute('disabled', 'disabled');foo.removeAttribute("disabled"), nhưng tôi sẽ không tin điều này với các phiên bản Internet Explorer cũ hơn (vốn nổi tiếng là lỗi khi nói đến setAttribute).


Nó sẽ có ý nghĩa để làm cả hai, thay đổi thuộc tính và thiết lập thuộc tính hoặc nó chỉ là một quá mức cần thiết?
v010dya

Có gì footrong foo.disabled = true;? Có phải đó là id của nút đó?
xếp chồng

@stack - Một biến giữ tham chiếu đến phần tử được thu thập thông qua bất kỳ phương tiện nào bạn thích (ví dụ: querySelector)
Quentin

145

để vô hiệu hóa

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

để kích hoạt

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

3
Vì một số lý do, điều này làm việc cho tôi mặc dù $('#btnPlaceOrder').disabled = false;không.
levininja

4
Tôi đã sử dụng $('#btnPlaceOrder')[0].disabled = falsenhư bộ chọn jquery dường như trả về một mảng. Nhún vai.
Chilly

6
jquery! == javascript. jquery trả về một bộ chọn giống như mảng.
AnilRedshift

@levininja, Chilly - $ ('# btnPlaceOrder'). prop ('bị vô hiệu hóa', sai);
Dominik Späte

22

Nó là một thuộc tính, nhưng là một thuộc tính boolean (vì vậy nó không cần tên, chỉ là một giá trị - tôi biết, nó thật kỳ lạ). Bạn có thể đặt thuộc tính tương đương trong Javascript:

document.getElementsByName("myButton")[0].disabled = true;

2
Nó không cần một giá trị, đó là tên mà nó không cần. (Lạ nhưng có thật).
Quentin

1
@David: Tôi nhớ đọc nó trước đó, đã sửa. Thật là kỳ lạ và có lẽ sẽ có ý nghĩa hơn nếu các công cụ tô sáng cú pháp tôn vinh nó một cách chính xác :-)
Andy E


9

Cách chính thức để đặt disabledthuộc tính trên một HTMLInputElementlà:

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');

Mặc dù câu trả lời của @ kaushar là đủ để kích hoạt và vô hiệu hóa HTMLInputElement, và có lẽ thích hợp hơn cho khả năng tương thích trình duyệt chéo do lỗi lịch sử của IE setAttribute, nhưng nó chỉ hoạt động vì Elementthuộc tính bóng Element. Nếu một thuộc tính được đặt, thì DOM sử dụng giá trị của thuộc tính theo mặc định thay vì giá trị của thuộc tính tương đương.

Có một sự khác biệt rất quan trọng giữa các thuộc tính và thuộc tính. Một ví dụ về một HTMLInputElement tài sản thực sự là input.value, và dưới đây cho thấy cách thức hoạt động của bóng:

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" />

Đó là những gì nó có nghĩa để nói rằng thuộc tính bóng thuộc tính. Khái niệm này cũng áp dụng cho các thuộc tính được kế thừa trên prototypechuỗi:

Tôi hy vọng điều này làm rõ bất kỳ sự nhầm lẫn nào về sự khác biệt giữa các thuộc tính và thuộc tính.


5

Nó vẫn là một thuộc tính. Đặt nó thành:

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

... là hợp lệ.


1
Hợp lệ, nhưng thông số kỹ thuật nói rằng nên tránh cú pháp: w3.org/TR/html4/appcill/notes.html#hB.3.3
Quentin

2
Tất cả các trình duyệt tìm kiếm bị vô hiệu hóa = "bị vô hiệu hóa", tôi biết thông số kỹ thuật nói để tránh điều đó, nhưng tôi chưa bao giờ có bất kỳ vấn đề nào khi cài đặt bị vô hiệu hóa = "bị vô hiệu hóa" hoặc được kiểm tra = "đã chọn" hoặc đã chọn = "đã chọn" t bị vô hiệu hóa = "đúng" ... chỉ một số trình duyệt sẽ nhận ra điều đó
Bob Fincheimer

Rõ ràng không phải tất cả các trình duyệt đều hỗ trợ nó - thông số kỹ thuật sẽ không rõ ràng nếu chúng không hoạt động. Chúng không còn được sử dụng phổ biến nữa.
Quentin

1
BTW, câu hỏi cho biết "làm cách nào tôi có thể thêm phần này một cách linh hoạt thông qua JavaScript"
Quentin

Chắc chắn nhưng câu hỏi tiếp tục nói về việc vô hiệu hóa không phải là một thuộc tính. Câu trả lời của tôi là về việc xua tan điều đó và nói rằng bạn có thể sử dụng nó như một thuộc tính. Bạn cũng có thể sử dụng thuộc tính DOM.
Oli

4

Nếu bạn có đối tượng nút, được gọi là b: b.disabled=false;


3

Tôi nghĩ rằng cách tốt nhất có thể là:

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

Nó hoạt động tốt trên nhiều trình duyệt.


4
nó phải được prop, không attr.
Antti Haapala

câu hỏi đang tìm kiếm giải pháp js bản địa
NDFA

0
<button disabled=true>text here</button>

Bạn vẫn có thể sử dụng một thuộc tính. Chỉ cần sử dụng thuộc tính 'bị vô hiệu hóa thay vì' giá trị '.


Đó là disabled="disabled"hoặc chỉ disabled. Bất kỳ giá trị chuỗi tương đương với "disabled", bao gồm disabled="true"disabled="false".
user4642212
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.