如果光标留在输入字段中,CTRL S函数会添加一个s,你如何阻止它?

时间:2012-07-06 15:52:41

标签: javascript dom

我在下面使用的代码工作正常,但如果光标留在输入字段中它会添加一个'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()

非常感谢和感谢您提前提供的所有帮助和支持,

干杯

2 个答案:

答案 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/