我在下面使用的代码工作正常,但如果光标留在输入字段中它会添加一个's'。如何在没有添加麻烦的情况下执行 CTRL - S ?
window.onload = function() {
//-------------------------------------------------------------------->>
// CTRL-S FEATURE:
//-------------------------------------------------------------------->>
var isCtrl = false;
document.attachEvent('onkeyup', KeyUpHandler);
document.attachEvent('onkeydown', KeyDownHandler);
function KeyUpHandler() {
if (event.keyCode == 17) {
isCtrl = false;
}
}//end of function
function KeyDownHandler() {
if (event.keyCode == 17) { isCtrl = true }
if (event.keyCode == 83 && isCtrl == true) {
v8_update()
}
}//end of function
}//end of onload()
非常感谢和感谢您提前提供的所有帮助和支持,
干杯
杰
答案 0 :(得分:2)
keydown
处理程序应该阻止默认操作继续 - 即插入到焦点元素中的字符。要完成此操作,请使用事件对象的preventDefault
方法:
function KeyDownHandler(evnt) {
var evnt = evnt || window.event;
if (evnt.keyCode == 83 && evnt.ctrlKey) {
evnt.preventDefault ? evnt.preventDefault() : window.event.returnValue = false;
v8_update();
return false;
}
}
On也可以返回false以停止传播并防止默认,但是,这可能对与事件绑定到同一元素的其他事件有害 - 您可能希望传播,尤其是在将此类事件附加到文档时本身。如果是这样,请取出虚假回报。
在此处试试:http://jsfiddle.net/LzezS/
<强>文档强>
答案 1 :(得分:1)
请勿使用此类黑客来检测是否按下ctrl
。只需检查布尔event.ctrlKey
属性即可。另外,由于attachEvent
的使用,您的代码只能在古老的IE浏览器中使用。这应该是你的代码:
function keyDownHandler(event) {
event = event || window.event; // <-- IE
if (event.keyCode == 83 && event.ctrlKey) {
v8_update();
return false; // <--
}
}
if (window.addEventListener) {
document.addEventListener('keydown', keyDownHandler, false);
} else {
document.attachEvent('onkeydown', keyDownHandler);
}
return false;
停止传播事件,并阻止输入字符:http://jsfiddle.net/ZwejW/。