0

以下で使用しているコードは、カーソルが入力フィールドに残っている場合に「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()

事前にご協力とご支援を賜り、誠にありがとうございます。

乾杯

ジェイ

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プロパティを確認するだけです。もう1つ、コードは。を使用しているため、古い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 に答える