Làm cách nào để kích hoạt một cái gì đó khi con trỏ ở trong TEXTAREA và Ctrl+ Enterđược nhấn? Sử dụng jQuery . Cảm ơn
Câu trả lời:
Bạn có thể sử dụng event.ctrlKey
cờ để xem liệu Ctrlphím có được nhấn hay không, giống như sau:
$('#textareaId').keydown(function (e) {
if (e.ctrlKey && e.keyCode == 13) {
// Ctrl-Enter pressed
}
});
Kiểm tra đoạn mã trên tại đây .
10
không được 13
.
keypress
sự kiện, mã phím sẽ là 10, nhưng keydown
hoặc keyup
sẽ báo cáo 13. Chỉ chrome thử nghiệm
Trên thực tế, cái này thực hiện thủ thuật và hoạt động trên tất cả các trình duyệt:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
liên kết đến js fiddle .
Ghi chú:
keyCode
10, không phải 13 ( báo cáo lỗi ). Vì vậy, chúng ta cần phải kiểm tra một trong hai.ctrlKey
có controltrên Windows, Linux và macOS (không command). Xem thêm metaKey
.ctrlKey
tương ứng với phím Command trên máy Mac không?
if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Giải pháp phổ quát
Điều này cũng hỗ trợ macOS: cả Ctrl+ Entervà ⌘ Command+ Entersẽ được chấp nhận.
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// do something
}
e.ctrlKey
phát hiện ⌃ Control
và e.metaKey
phát hiện ⌘ Command
. Sử dụng điều này nếu bạn muốn cả Ctrl-Enter và Command-Enter để kích hoạt hành vi.
e.keyCode
số 10
nghĩa Nhập ngoài 13
? Các MDN keyCode
tài liệu liệt kê chỉ 13
là một giá trị có thể cho Enter, thử nghiệm trên nhiều trình duyệt và hệ điều hành.
Tôi tìm thấy câu trả lời của những người khác hoặc không đầy đủ hoặc không tương thích với nhiều trình duyệt.
Mã này hoạt động google chrome.
$(function ()
{
$(document).on("keydown", "#textareaId", function(e)
{
if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
{
alert('ctrl+enter');
}
});
});
Điều này có thể được mở rộng thành một plugin JQuery đơn giản nhưng linh hoạt như trong:
$.fn.enterKey = function (fnc, mod) {
return this.each(function () {
$(this).keypress(function (ev) {
var keycode = (ev.keyCode ? ev.keyCode : ev.which);
if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) {
fnc.call(this, ev);
}
})
})
}
Như vậy
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
nên gửi biểu mẫu khi người dùng nhấn ctrl-enter với tiêu điểm là vùng văn bản của biểu mẫu đó.
Có lẽ hơi muộn với trò chơi, nhưng đây là những gì tôi sử dụng. Nó cũng sẽ buộc gửi biểu mẫu là mục tiêu hiện tại của con trỏ.
$(document.body).keypress(function (e) {
var $el = $(e.target);
if (e.ctrlKey && e.keyCode == 10) {
$el.parents('form').submit();
} else if (e.ctrlKey && e.keyCode == 13) {
$el.parents('form').submit();
}
});
if
… else if
” thành một if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
.