How to detect that Ctrl+R was pressed?
Asked Answered
U

11

29

I'm coding a function in jquery that executes if Ctrl+R is pressed but I can't seem to find out what the left and right ctrl keycodes are... Can someone please help?

UPDATE

    ///this works
    $(document).keydown(function(e){
      if(e.keyCode==17){alert("control was pressed")};
 });

Next Question-- How do I link control key press and another key press to execute a function?

  if(e.keyCode==17){llCtrlPress=1};
   if(e.keyCode==97 && llCtrlPress=1){DO SOMETHING}
  ????????????

That seems like it would work fine but then how do I set llCtrlpress back to '0' on keyup?

Uropygium answered 4/5, 2010 at 16:34 Comment(2)
@Uropygium - I screwed up :( It should have been 17. I've corrected it now.Copyhold
If you remove your original question, it won't be useful for future people, please leave your original question and then open a new question if you have another one.Bifacial
B
53

You have to use the keydown function to trap Ctrl characters. Here is my implementation of Ctrl+A:

    $(document).keydown(function(e) {
        if (e.keyCode == 65 && e.ctrlKey) {
            alert('ctrl A');
        }
    });

Ctrl-R is tougher because in most browsers, that is Reload Page, which means the javascript doesn't run, the page is refreshed.

Just a note as well, the keyCode value are different in the keydown/keyupup functions than in the keypress functions.

EDIT: Removed ctrl variable, forgot about ctrlKey

Bifacial answered 4/5, 2010 at 16:50 Comment(2)
That variable needs some serious closureJanie
Didn't need the variable anyway, forgot about ctrlKey. Thanks lincolnk and Josh.Bifacial
P
5

Here is an entire list of keycodes that you can use.

Put answered 4/5, 2010 at 16:41 Comment(1)
Link is dead. Updated resource?Tatting
R
5

This is the code I'm using to disable refresh on IE and firefox (This works well for F5, Ctrl+F5 and Ctrl+R)

<script language="javascript" type="text/javascript">
    //this code handles the F5/Ctrl+F5/Ctrl+R
    document.onkeydown = checkKeycode
    function checkKeycode(e) {
        var keycode;
        if (window.event)
            keycode = window.event.keyCode;
        else if (e)
            keycode = e.which;

        // Mozilla firefox
        if ($.browser.mozilla) {
            if (keycode == 116 ||(e.ctrlKey && keycode == 82)) {
                if (e.preventDefault)
                {
                    e.preventDefault();
                    e.stopPropagation();
                }
            }
        } 
        // IE
        else if ($.browser.msie) {
            if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) {
                window.event.returnValue = false;
                window.event.keyCode = 0;
                window.status = "Refresh is disabled";
            }
        }
    }
</script>

If you don't want to use useragent to detect what type of browser it is ($.browser uses navigator.userAgent to determine the platform), you can use

if('MozBoxSizing' in document.documentElement.style) - returns true for firefox

Rattletrap answered 14/11, 2012 at 10:44 Comment(2)
The user didn't ask to disable F5, so your answer (While helpful) doesn't answer the question.Picul
Also, it's horrifying that you're trying to disable fundamental browser functions; whatever problem you're trying to solve, this is not the right answer.Modigliani
J
2

There is a boolean property called ctrlKey that you should be able to use here...

$(document).keypress(function(e) { 
   alert("Ctrl is pressed: " + e.ctrlKey); 
}); 
Janie answered 4/5, 2010 at 16:56 Comment(0)
P
2

why aren't you using e.ctrlKey ?

 if (e.keyCode == 65 && e.ctrlKey) {
     alert('ctrl A');
 }

edit: here's an appropriate function to detect your ctrl-r keypress and stop the browser from reloading.

function keydown(e) {
    if (e.ctrlKey && e.keyCode == 82) {
        // 82 = r

        // TODO: your thing.

        if (e.preventDefault) {
            e.preventDefault();
        }
        else {
            return false;
        }
    }
}

i'm a jquery newbie, i think you'd do

$(document).keydown(keydown);

right?

Penutian answered 4/5, 2010 at 16:58 Comment(0)
M
1
 $(document).ready(function () {
     $(document).keyup(function (e) {
         if (e.keyCode == 81 && e.ctrlKey) { //CTRL+Q
             alert("CTRL+Q");
         } else if (e.keyCode == 27) { //ESCAPE
             alert("escape");
         } else if (e.keyCode == 67 && e.altKey) { // ALT+C
           alert("ALT+C");
        }     
    });
});

key codes

Malraux answered 13/5, 2014 at 12:11 Comment(0)
K
1

Use event.key and modern JS!

$(document).keypress(function(event) {
    if (event.key === "r" && event.ctrlKey) {
        // Do something
    }
});

or without jQuery:

document.addEventListener("keypress", function onEvent(event) {
    if (event.key === "r" && event.ctrlKey) {
        // Do something better
    }
});

Mozilla Docs

Supported Browsers

Knute answered 18/2, 2018 at 19:9 Comment(0)
S
0

The Key Code for Ctrl key is 11.

$(document).keypress(function(e) { 


  alert("Ctrl is pressed: " + e.ctrlKey); 
}); 
Subnormal answered 19/4, 2012 at 7:29 Comment(0)
B
0
  • Pure JavaScript and the KeyboardEvent.key
  • Support metaKey for MAC
  • Use Event.preventDefault() to prevent reload
window.addEventListener("keydown", (ev) => {
  if (ev.key === "r" && (ev.ctrlKey || ev.metaKey)) {
    ev.preventDefault(); // Prevent browser reload on CTRL+R
    console.log(ev.key);
  }
});
Bare answered 14/5, 2021 at 4:52 Comment(0)
I
-1
@HostListener('window:keydown', ['$event'])
  keyEvent(event: KeyboardEvent) {

   if (event.ctrlKey && event.keyCode == 82)
    {

    }
  }
Incandesce answered 6/3, 2019 at 9:25 Comment(0)
V
-1

We can also use Ascii code for finding the characters as well as the characters

$('html').keydown(function (e) {
     keydownfunc(e);
});
function keydownfunc(e) {
   if (e.ctrlKey && (e.key === "r" || e.key === "R")) {
       alert("ctrl+R");
   }
    }
Veterinary answered 7/9, 2019 at 5:13 Comment(1)
Hi. This duplicates many other answers. If you agree, please just delete it. (And ASCII is not involved with JavaScipt and HTML at all. See KeyboardEvent.key ) If are interested in answering the newest JavaScript questions, try a search or tag subscription.Acolyte

© 2022 - 2025 — McMap. All rights reserved.