0

我在下面使用的代码工作正常,除了如果光标留在输入字段中它会添加一个“s”。我该怎么做CTRL-S没有添加那个讨厌的 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()

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

干杯

周杰伦

4

2 回答 2

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/

文档

于 2012-07-06T15:56:09.470 回答
1

不要使用这样的黑客来检测是否ctrl按下。只需检查布尔event.ctrlKey属性。另一件事,您的代码只能在古老的 IE 浏览器中运行,因为使用attachEvent. 这应该是您的代码:

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/

于 2012-07-06T16:02:59.980 回答