Reputation: 242
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?
Upvotes: 0
Views: 58
Reputation: 594
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);
}
})
Upvotes: 1