Không cho phép nhập khóa ở bất cứ đâu
Nếu bạn không có <textarea>
trong mẫu của mình, thì chỉ cần thêm những thứ sau vào <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Hoặc với jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Điều này sẽ khiến mọi phím bấm bên trong biểu mẫu sẽ được kiểm tra trên key
. Nếu không Enter
, nó sẽ trở lại true
và mọi thứ tiếp tục như bình thường. Nếu có Enter
, nó sẽ trở lạifalse
và mọi thứ sẽ dừng ngay lập tức, vì vậy mẫu đơn sẽ không được gửi.
Sự keydown
kiện này được ưu tiên hơn keyup
vì keyup
quá muộn để chặn biểu mẫu gửi. Trong lịch sử cũng có keypress
, nhưng điều này không được chấp nhận, cũng nhưKeyboardEvent.keyCode
. Bạn nên sử dụng KeyboardEvent.key
thay vì trả về tên của phím được nhấn. Khi nàoEnter
được kiểm tra, thì điều này sẽ kiểm tra 13 (nhập bình thường) cũng như 108 (nhập numpad).
Lưu ý rằng $(window)
như được đề xuất trong một số câu trả lời khác thay vì$(document)
không hoạt động cho keydown
/keyup
trong IE <= 8, vì vậy đó không phải là một lựa chọn tốt nếu bạn cũng muốn bao gồm cả những người dùng kém đó.
Chỉ cho phép nhập khóa trên textareas
Nếu bạn có một <textarea>
biểu mẫu của mình (tất nhiên sẽ chấp nhận phím Enter), sau đó thêm trình xử lý phím tắt cho mọi thành phần đầu vào riêng lẻ không phải là một <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Để giảm bản tóm tắt, điều này tốt hơn là được thực hiện với jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Nếu bạn có các hàm xử lý sự kiện khác được đính kèm trên các phần tử đầu vào đó, vì lý do nào đó bạn cũng muốn gọi phím enter vì một số lý do, thì chỉ ngăn hành vi mặc định của sự kiện thay vì trả về false, vì vậy nó có thể truyền đúng cho các trình xử lý khác.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Cho phép nhập khóa trên textareas và chỉ gửi các nút
Nếu bạn cũng muốn cho phép nhập phím trên các nút gửi <input|button type="submit">
, thì bạn luôn có thể tinh chỉnh bộ chọn như bên dưới.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Lưu ý rằng input[type=text]
như được đề xuất trong một số câu trả lời khác không bao gồm các đầu vào phi văn bản HTML5 đó, vì vậy đó không phải là một công cụ chọn tốt.