ฉันจะทริกเกอร์บางสิ่งได้อย่างไรเมื่อเคอร์เซอร์อยู่ในTEXTAREAและกดCtrl+ Enterใช้jQuery ขอบคุณ
ฉันจะทริกเกอร์บางสิ่งได้อย่างไรเมื่อเคอร์เซอร์อยู่ในTEXTAREAและกดCtrl+ Enterใช้jQuery ขอบคุณ
คำตอบ:
คุณสามารถใช้event.ctrlKey
แฟล็กเพื่อดูว่าCtrlมีการกดปุ่มหรือไม่สิ่งนี้:
$('#textareaId').keydown(function (e) {
if (e.ctrlKey && e.keyCode == 13) {
// Ctrl-Enter pressed
}
});
10
13
keypress
เหตุการณ์ทริกเกอร์รหัสจะเป็น 10 แต่keydown
หรือkeyup
จะรายงาน 13 เท่านั้นทดสอบ chrome
อันที่จริงนี่เป็นเคล็ดลับและใช้ได้กับทุกเบราว์เซอร์:
if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)
เชื่อมโยงไปยังซอ js
หมายเหตุ:
keyCode
10 ไม่ใช่ 13 ( รายงานข้อบกพร่อง ) ดังนั้นเราต้องตรวจสอบอย่างใดอย่างหนึ่งctrlKey
อยู่controlบน Windows, Linux และ macOS (ไม่ใช่command) metaKey
ดูเพิ่มเติมctrlKey
สอดคล้องกับปุ่ม Command บน Macs หรือไม่?
if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
โซลูชันสากล
รองรับ macOS ด้วย: ทั้งCtrl+ Enterและ⌘ Command+ Enterจะได้รับการยอมรับ
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// do something
}
e.ctrlKey
ตรวจจับ⌃ Control
และตรวจจับe.metaKey
⌘ Command
ใช้สิ่งนี้หากคุณต้องการให้ทั้ง Ctrl-Enter และ Command-Enter ทริกเกอร์ลักษณะการทำงาน
e.keyCode
ของ10
หมายถึงใส่ในนอกเหนือไป13
? MDN keyCode
เอกสารรายการเท่านั้น13
เป็นค่าที่เป็นไปได้สำหรับใส่ทดสอบเบราว์เซอร์และระบบปฏิบัติการ
ฉันพบคำตอบของผู้อื่นทั้งที่ไม่สมบูรณ์หรือไม่สามารถใช้งานข้ามเบราว์เซอร์ได้
รหัสนี้ใช้ได้กับ google chrome
$(function ()
{
$(document).on("keydown", "#textareaId", function(e)
{
if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
{
alert('ctrl+enter');
}
});
});
สิ่งนี้สามารถขยายเป็นปลั๊กอิน JQuery ที่เรียบง่าย แต่ยืดหยุ่นได้ดังต่อไปนี้:
$.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);
}
})
})
}
ด้วยประการฉะนี้
$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')
ควรส่งแบบฟอร์มเมื่อผู้ใช้กด ctrl-enter โดยเน้นที่ textarea ของฟอร์มนั้น
$('my_text_area').focus(function{ set_focus_flag });
//ctrl on key down set flag
//enter on key down = check focus flag, check ctrl flag
ก่อนอื่นคุณต้องตั้งค่าสถานะเมื่อCtrlถูกกดให้ทำเช่นนี้เมื่อกดคีย์ลง จากนั้นคุณต้องตรวจสอบคีย์ดาวน์ของ Enter ล้างค่าธงเมื่อคุณเห็น keyup Ctrlสำหรับ
อาจจะช้าไปหน่อยสำหรับเกม แต่นี่คือสิ่งที่ฉันใช้ นอกจากนี้ยังบังคับให้ส่งแบบฟอร์มที่เป็นเป้าหมายปัจจุบันของเคอร์เซอร์
$(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
” ให้เป็นซิงเกิลif (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13))
ได้