Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect Ctrl + A in keyup event

Tags:

I want to detect the Control + A event in input. I can find the Control + A event, but the function is continuing even after return false.

jsFiddle - http://jsfiddle.net/f6rcgpmh/4/

$('.searchTerm').keyup(function(e) {        $("#status").text("");        if (e.ctrlKey) {          if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'              console.log("Control pressed");              e.preventDefault();              return false;          }      }      $("#status").text("This should not work if Ctrl + A is pressed");  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <form id="search" class="search">      <input class="searchTerm" placeholder="Filter Books...">      <input class="searchButton" type="submit">  </form>  <div id="status"></div>

I want this to work in keyup not in keydown. Because I am using autosearch and I don't want to call function before keyrelease. And also Ctrl + A won't highlight text in keydown when it returned false.

like image 286
Vishnu Avatar asked Aug 10 '15 06:08

Vishnu


People also ask

How do you detect whether a user has pressed the enter key or not?

To check if an “enter” key is pressed inside a textbox, just bind the keypress() to the textbox. $('#textbox'). keypress(function(event){ var keycode = (event.

What is the use of Onkeyup () event?

The onkeyup attribute fires when the user releases a key (on the keyboard). Tip: The order of events related to the onkeyup event: onkeydown. onkeypress.


2 Answers

Actually the function stops. What you are experiencing is that two keyup events trigger: the one from ctrl and the one from A.

The first one returns as expected because it does fill the requirements: ctrlKey == true and keyCode == 65 || keyCode == 97.

But the second one, there will be only one key pressed so both statements can't be true together:

  • If you last released the ctrl, then ctrlKey is true but keyCode == 65 || keyCode == 97 is not.

  • If you last released the A, then ctrlKey is now false.

Then the line which sets #status to an error message is run.

like image 191
Kaiido Avatar answered Jan 22 '23 13:01

Kaiido


Actually it's not. You must change your event from 'keyup' to 'keydown'. Then try it again. You can check this fiddle. http://jsfiddle.net/ebilgin/f6rcgpmh/5/


If you need control on autocomplete, you have to put your controls before sending the data.

The Ctrl keyup event trigger causes your problem. I added another condition to your code,

if (e.keyCode == 17) // Ctrl key, fires at Ctrl's keyup.     return false; 

You can check my new fiddle, http://jsfiddle.net/ebilgin/f6rcgpmh/10/.

like image 32
ebilgin Avatar answered Jan 22 '23 13:01

ebilgin