ฉันจะผูกฟังก์ชั่นเข้ากับปุ่มลูกศรซ้ายและขวาใน Javascript และ / หรือ jQuery ได้อย่างไร ฉันดูปลั๊กอิน js-hotkey สำหรับ jQuery (ล้อมฟังก์ชันการผูกในตัวเพื่อเพิ่มอาร์กิวเมนต์เพื่อจดจำคีย์เฉพาะ) แต่ดูเหมือนจะไม่สนับสนุนปุ่มลูกศร
ฉันจะผูกฟังก์ชั่นเข้ากับปุ่มลูกศรซ้ายและขวาใน Javascript และ / หรือ jQuery ได้อย่างไร ฉันดูปลั๊กอิน js-hotkey สำหรับ jQuery (ล้อมฟังก์ชันการผูกในตัวเพื่อเพิ่มอาร์กิวเมนต์เพื่อจดจำคีย์เฉพาะ) แต่ดูเหมือนจะไม่สนับสนุนปุ่มลูกศร
คำตอบ:
document.onkeydown = function(e) {
switch(e.which) {
case 37: // left
break;
case 38: // up
break;
case 39: // right
break;
case 40: // down
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
};
หากคุณต้องการรองรับ IE8 ให้เริ่มการทำงานของร่างกายe = e || window.event; switch(e.which || e.keyCode) {
ดังนี้
(แก้ไข 2020)
โปรดทราบว่าKeyboardEvent.which
ขณะนี้เลิกใช้แล้ว ดูตัวอย่างนี้โดยใช้KeyboardEvent.key
สำหรับโซลูชันที่ทันสมัยกว่าเพื่อตรวจหาปุ่มลูกศร
e.which
เหมือน jQuery แนะนำสำหรับ cross-browser ใช้e.preventDefault()
แทนreturn false
( return false
บน jQuery event handler ทริกเกอร์ทั้งสองe.preventDefault()
และe.stopPropagation()
เหตุการณ์ที่สองจะทำให้เกิดเหตุการณ์ที่เพิ่มในภายหลังล้มเหลวเนื่องจากเหตุการณ์จะไม่แพร่กระจายไปยังพวกมัน) และที่ ในตอนท้ายของสวิทช์จะกลับมาโดยไม่ต้องโทรe.preventDefault()
หากมันเป็นคีย์อื่นที่ไม่ใช่ปุ่มที่ถูกกีดกันการใช้งานคีย์อื่น ๆ และแทนที่จะ$.ui.keyCode.DOWN
เปรียบเทียบกับตัวเลข (เร็วกว่ามาก)
$.ui.keyCode.DOWN
ที่คุณมองหา$
อยู่ในขอบเขตของคำศัพท์ของคุณไม่ได้พบว่ามันจะขึ้นระดับ ... มองหา$
ทำซ้ำจนกว่าจะอยู่ในขอบเขตทั่วโลกพบว่ามันอยู่บนโลกwindow
เข้าถึง$
บนหน้าต่าง, อินเทอร์เน็ตui
ในwindow.$
การเข้าถึงkeyCode
ในwindow.$.ui
การเข้าถึงDOWN
ในการwindow.$.ui.keyCode
ที่จะได้รับค่าดั้งเดิมคุณต้องการเปรียบเทียบแล้วทำจริงของคุณเปรียบเทียบ ไม่ว่าความเร็วนั้นสำคัญกับคุณหรือไม่นั้นเป็นการตัดสินใจส่วนตัวฉันแค่มีแนวโน้มที่จะหลีกเลี่ยงการเข้าถึง 4 ระดับเมื่อมีสถานการณ์ที่ฉันสามารถเขียน / แสดงความคิดเห็นดั้งเดิมได้อย่างง่ายดาย
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});
รหัสตัวละคร:
37 - ซ้าย
38 - ขึ้นไป
39 - ถูกต้อง
40 - ลง
e.which
แทนe.keyCode
การสนับสนุนเบราว์เซอร์เพิ่มเติม ดูความคิดเห็นของฉันด้านล่าง
คุณสามารถใช้รหัสคีย์ของปุ่มลูกศร (37, 38, 39 และ 40 สำหรับซ้าย, ขึ้น, ขวาและลง):
$('.selector').keydown(function (e) {
var arrow = { left: 37, up: 38, right: 39, down: 40 };
switch (e.which) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});
The event.which property normalizes event.keyCode and event.charCode
- api.jquery.com/event.which
นี่มันช้าไปหน่อย แต่ HotKeys มีข้อบกพร่องที่สำคัญมากซึ่งทำให้เกิดเหตุการณ์ที่จะถูกดำเนินการหลายครั้งถ้าคุณแนบฮอตคีย์มากกว่าหนึ่งรายการเข้ากับองค์ประกอบ เพียงใช้ jQuery ธรรมดา
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
ฉันได้รวมบิตที่ดีที่สุดจากคำตอบอื่น ๆ :
$(document).keydown(function(e){
switch(e.which) {
case $.ui.keyCode.LEFT:
// your code here
break;
case $.ui.keyCode.UP:
// your code here
break;
case $.ui.keyCode.RIGHT:
// your code here
break;
case $.ui.keyCode.DOWN:
// your code here
break;
default: return; // allow other keys to be handled
}
// prevent default action (eg. page moving up/down)
// but consider accessibility (eg. user may want to use keys to choose a radio button)
e.preventDefault();
});
คุณสามารถใช้ KeyboardJS ฉันเขียนไลบรารีสำหรับงานเช่นนี้
KeyboardJS.on('up', function() { console.log('up'); });
KeyboardJS.on('down', function() { console.log('down'); });
KeyboardJS.on('left', function() { console.log('right'); });
KeyboardJS.on('right', function() { console.log('left'); });
ชำระเงินห้องสมุดที่นี่ => http://robertwhurst.github.com/KeyboardJS/
วิธีแก้ปัญหาสั้น ๆ โดยใช้ Javascript ธรรมดา (ขอบคุณ Sygmoral สำหรับการปรับปรุงที่แนะนำ):
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
document.addEventListener('keydown', myFunction);
คุณแน่ใจหรือไม่ว่า jQuery.HotKeys ไม่รองรับปุ่มลูกศร ฉันเคยยุ่งกับการสาธิตก่อนและสังเกตการทำงานซ้ายขวาขึ้นและลงเมื่อฉันทดสอบใน IE7, Firefox 3.5.2 และ Google Chrome 2.0.172 ...
แก้ไข : ดูเหมือนว่า jquery.hotkeys ถูกย้ายไปที่ Github: https://github.com/jeresig/jquery.hotkeys
แทนที่จะใช้return false;
ในตัวอย่างด้านบนคุณสามารถใช้e.preventDefault();
สิ่งที่เหมือนกัน แต่ง่ายต่อการเข้าใจและอ่าน
ตัวอย่างของ pure js เมื่อไปทางซ้ายหรือขวา
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
คุณสามารถใช้การผูก jQuery:
$(window).bind('keydown', function(e){
if (e.keyCode == 37) {
console.log('left');
} else if (e.keyCode == 38) {
console.log('up');
} else if (e.keyCode == 39) {
console.log('right');
} else if (e.keyCode == 40) {
console.log('down');
}
});
คุณสามารถตรวจสอบสภาพอากาศที่arrow key
ถูกกดโดย:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
ป้องกันลูกศรใช้ได้เฉพาะกับวัตถุอื่นที่เลือกได้ดีจริง ๆ แล้วฉันยังไม่ได้ทดสอบกับวัตถุอื่น ๆ ฮ่า ๆ แต่มันสามารถหยุดลูกศรเหตุการณ์ในหน้าและประเภทอินพุต
ฉันพยายามบล็อกลูกศรซ้ายและขวาเพื่อเปลี่ยนค่าของวัตถุ SELECT โดยใช้ "e.preventDefault ()" หรือ "return false" บน "kepress" "keydown" และ "keyup" แต่ยังคงเปลี่ยนค่าวัตถุ แต่เหตุการณ์ยังคงบอกคุณว่าลูกศรถูกกด
ห้องสมุด Javascript ที่แข็งแกร่งสำหรับการจับแป้นพิมพ์และการป้อนคีย์ผสม มันไม่มีการพึ่งพา
http://jaywcjlove.github.io/hotkeys/
hotkeys('right,left,up,down', function(e, handler){
switch(handler.key){
case "right":console.log('right');break
case "left":console.log('left');break
case "up":console.log('up');break
case "down":console.log('down');break
}
});
ฉันมาที่นี่เพื่อหาวิธีง่ายๆในการปล่อยให้ผู้ใช้เมื่อจดจ่อกับอินพุตให้ใช้ปุ่มลูกศรเพื่อ +1 หรือ -1 ตัวเลขที่เป็นตัวเลข ฉันไม่เคยพบคำตอบที่ดี แต่ทำรหัสต่อไปนี้ซึ่งใช้งานได้ดี - ทำให้ไซต์นี้กว้างขึ้นในตอนนี้
$("input").bind('keydown', function (e) {
if(e.keyCode == 40 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())-1.0);
} else if(e.keyCode == 38 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())+1.0);
}
});
กับกาแฟ & Jquery
$(document).on 'keydown', (e) ->
switch e.which
when 37 then console.log('left key')
when 38 then console.log('up key')
when 39 then console.log('right key')
when 40 then console.log('down key')
e.preventDefault()