<input type="button">
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Các phần tử <input> có kiểu button được hiển thị dưới dạng nút nhấn (push button), có thể được lập trình để điều khiển các chức năng tùy chỉnh trên trang web khi được gán một hàm xử lý sự kiện (thường là sự kiện click).
Try it
<input class="styled" type="button" value="Add to favorites" />
.styled {
border: 0;
line-height: 2.5;
padding: 0 20px;
font-size: 1rem;
text-align: center;
color: white;
text-shadow: 1px 1px 1px black;
border-radius: 10px;
background-color: tomato;
background-image: linear-gradient(
to top left,
rgb(0 0 0 / 20%),
rgb(0 0 0 / 20%) 30%,
transparent
);
box-shadow:
inset 2px 2px 3px rgb(255 255 255 / 60%),
inset -2px -2px 3px rgb(0 0 0 / 60%);
}
.styled:hover {
background-color: red;
}
.styled:active {
box-shadow:
inset -2px -2px 3px rgb(255 255 255 / 60%),
inset 2px 2px 3px rgb(0 0 0 / 60%);
}
Giá trị
>Nút có giá trị
Thuộc tính value của phần tử <input type="button"> chứa một chuỗi được dùng làm nhãn của nút. value cung cấp accessible description cho nút.
<input type="button" value="Click Me" />
Nút không có giá trị
Nếu bạn không chỉ định value, bạn sẽ có một nút trống:
<input type="button" />
Sử dụng nút
Các phần tử <input type="button"> không có hành vi mặc định (các biến thể của chúng là <input type="submit"> và <input type="reset"> được dùng để gửi và đặt lại biểu mẫu). Để làm cho nút thực hiện chức năng nào đó, bạn phải viết mã JavaScript.
Một nút cơ bản
Chúng ta sẽ bắt đầu bằng cách tạo một nút cơ bản với trình xử lý sự kiện click để khởi động máy (thực ra là chuyển đổi giá trị value của nút và nội dung văn bản của đoạn văn tiếp theo):
<form>
<input type="button" value="Start machine" />
</form>
<p>The machine is stopped.</p>
const button = document.querySelector("input");
const paragraph = document.querySelector("p");
button.addEventListener("click", updateButton);
function updateButton() {
if (button.value === "Start machine") {
button.value = "Stop machine";
paragraph.textContent = "The machine has started!";
} else {
button.value = "Start machine";
paragraph.textContent = "The machine is stopped.";
}
}
Script lấy tham chiếu đến đối tượng HTMLInputElement đại diện cho <input> trong DOM và lưu vào biến button. Sau đó addEventListener() được dùng để gắn một hàm sẽ chạy khi sự kiện click xảy ra trên nút.
Thêm phím tắt bàn phím cho nút
Phím tắt bàn phím, còn gọi là access key hay keyboard equivalent, cho phép người dùng kích hoạt nút bằng một phím hoặc tổ hợp phím. Để thêm phím tắt cho nút — như với bất kỳ <input> nào — bạn dùng thuộc tính toàn cục accesskey.
Trong ví dụ này, s được chỉ định làm access key (bạn cần nhấn s cộng với các phím bổ trợ tương ứng với trình duyệt/hệ điều hành; xem accesskey để biết danh sách).
<form>
<input type="button" value="Start machine" accesskey="s" />
</form>
<p>The machine is stopped.</p>
Note: Vấn đề với ví dụ trên là người dùng sẽ không biết access key là gì! Trong một trang web thực tế, bạn cần cung cấp thông tin này theo cách không ảnh hưởng đến thiết kế trang (ví dụ: cung cấp liên kết trỏ đến thông tin về các access key của trang).
Vô hiệu hóa và kích hoạt nút
Để vô hiệu hóa một nút, hãy chỉ định thuộc tính toàn cục disabled trên nút như sau:
<input type="button" value="Disable me" disabled />
Thiết lập thuộc tính disabled
Bạn có thể kích hoạt và vô hiệu hóa nút vào lúc chạy bằng cách đặt disabled thành true hoặc false. Trong ví dụ này, nút ban đầu được kích hoạt, nhưng khi bạn nhấn nó, nút sẽ bị vô hiệu hóa bằng button.disabled = true. Sau đó, hàm setTimeout() được dùng để đặt lại nút về trạng thái kích hoạt sau hai giây.
<input type="button" value="Enabled" />
const button = document.querySelector("input");
button.addEventListener("click", disableButton);
function disableButton() {
button.disabled = true;
button.value = "Disabled";
setTimeout(() => {
button.disabled = false;
button.value = "Enabled";
}, 2000);
}
Kế thừa trạng thái disabled
Nếu thuộc tính disabled không được chỉ định, nút kế thừa trạng thái disabled từ phần tử cha. Điều này cho phép bạn kích hoạt và vô hiệu hóa nhóm các phần tử cùng một lúc bằng cách bao chúng trong một container như phần tử <fieldset>, rồi đặt disabled trên container.
Ví dụ dưới đây cho thấy điều này. Rất giống ví dụ trước, ngoại trừ thuộc tính disabled được đặt trên <fieldset> khi nút đầu tiên được nhấn — điều này khiến cả ba nút bị vô hiệu hóa cho đến khi hết thời gian chờ hai giây.
<fieldset>
<legend>Button group</legend>
<input type="button" value="Button 1" />
<input type="button" value="Button 2" />
<input type="button" value="Button 3" />
</fieldset>
const button = document.querySelector("input");
const fieldset = document.querySelector("fieldset");
button.addEventListener("click", disableButton);
function disableButton() {
fieldset.disabled = true;
setTimeout(() => {
fieldset.disabled = false;
}, 2000);
}
Note:
Không giống các trình duyệt khác, Firefox duy trì trạng thái disabled của phần tử <input> ngay cả sau khi trang được tải lại. Để khắc phục, hãy đặt thuộc tính autocomplete của phần tử <input> thành off. (Xem Firefox bug 654072 để biết thêm chi tiết.)
Kiểm tra hợp lệ
Nút không tham gia vào kiểm tra ràng buộc; chúng không có giá trị thực sự cần ràng buộc.
Ví dụ
Ví dụ dưới đây cho thấy một ứng dụng vẽ rất cơ bản được tạo bằng phần tử <canvas> cùng một số CSS và JavaScript (CSS sẽ được ẩn để ngắn gọn). Hai điều khiển đầu cho phép bạn chọn màu và kích thước bút vẽ. Nút khi được nhấn sẽ gọi hàm xóa canvas.
<div class="toolbar">
<input type="color" aria-label="select pen color" />
<input
type="range"
min="2"
max="50"
value="30"
aria-label="select pen size" /><span class="output">30</span>
<input type="button" value="Clear canvas" />
</div>
<canvas class="myCanvas">
<p>Add suitable fallback here.</p>
</canvas>
const canvas = document.querySelector(".myCanvas");
const width = (canvas.width = window.innerWidth);
const height = (canvas.height = window.innerHeight - 85);
const ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(0 0 0)";
ctx.fillRect(0, 0, width, height);
const colorPicker = document.querySelector('input[type="color"]');
const sizePicker = document.querySelector('input[type="range"]');
const output = document.querySelector(".output");
const clearBtn = document.querySelector('input[type="button"]');
// covert degrees to radians
function degToRad(degrees) {
return (degrees * Math.PI) / 180;
}
// update size picker output value
sizePicker.oninput = () => {
output.textContent = sizePicker.value;
};
// store mouse pointer coordinates, and whether the button is pressed
let curX;
let curY;
let pressed = false;
// update mouse pointer coordinates
document.onmousemove = (e) => {
curX = e.pageX;
curY = e.pageY;
};
canvas.onmousedown = () => {
pressed = true;
};
canvas.onmouseup = () => {
pressed = false;
};
clearBtn.onclick = () => {
ctx.fillStyle = "rgb(0 0 0)";
ctx.fillRect(0, 0, width, height);
};
function draw() {
if (pressed) {
ctx.fillStyle = colorPicker.value;
ctx.beginPath();
ctx.arc(
curX,
curY - 85,
sizePicker.value,
degToRad(0),
degToRad(360),
false,
);
ctx.fill();
}
requestAnimationFrame(draw);
}
draw();
Tóm tắt kỹ thuật
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| HTML> # button-state-(type=button)> |
Tương thích trình duyệt
Xem thêm
<input>và giao diệnHTMLInputElementthực thi nó.- Phần tử
<button>hiện đại hơn.