0

var keydownTriggered = false;
console.log(keydownTriggered);
document.getElementById('form').addEventListener('keydown', e => {
  setTimeout(function() {
    console.log("Keydown Start Offset", window.getSelection().getRangeAt(0).startOffset);
    console.log("Keydown End Offset", window.getSelection().getRangeAt(0).endOffset);
    keydownTriggered = true;
    console.log(keydownTriggered);
  }, 0);
})
document.getElementById('form').addEventListener('keyup', e => {
  keydownTriggered = false;
  console.log(keydownTriggered);
})

if (!keydownTriggered) {
  document.getElementById('form').addEventListener('click', e => {
    console.log("Click: Keydown Start Offset", window.getSelection().getRangeAt(0).startOffset);
    console.log("Click: Keydown End Offset", window.getSelection().getRangeAt(0).endOffset);
    keydownTriggered = false;
    console.log(keydownTriggered);
  })
}
<div id="form" contenteditable="true"></div>

This code shouldn't trigger the 'click' event when the 'keydown' event is triggered. For example, when I'm long pressing 'A' it means that 'keydown' is triggered so when I click anywhere in the contenteditable element, the console.log inside the if statement should not be triggered. However, I get this result.

test.html:10 Keydown Start Offset 8
test.html:11 Keydown End Offset 8
test.html:13 true
test.html:23 Click: Keydown Start Offset 8
test.html:24 Click: Keydown End Offset 8
test.html:26 false
test.html:10 Keydown Start Offset 9
test.html:11 Keydown End Offset 9

The value of keydownTriggered is true is seen in line 13 but the if statement is still triggered.

I tried changing the if statement to (keydownTriggered == true), (keydownTriggered === true) and tried changing all boolean value to numbers (true to 1 and false to 0) but got nothing. What am I doing wrong here?

1 Answer 1

1

You should add if statement in the click event inside, otherwise when you click, the click event callback will always be run

document.getElementById('form').addEventListener('click', e => {
    if (!keydownTriggered){
        console.log("Click: Keydown Start Offset", window.getSelection().getRangeAt(0).startOffset);
        console.log("Click: Keydown End Offset", window.getSelection().getRangeAt(0).endOffset);
        keydownTriggered = false;
        console.log(keydownTriggered);
    }
})
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.