I have a tree panel and for each node i have single click and double click events. but when i double click it is firing the single click event also. so how to prevent firing single click event when double clicked?
Generally using both single click and double click events is considered a bad practice and highly discouraged.
However, if you still want to do this, the only way to be able to distinct between single click and double click is to artificially add this distintion by measuring time between clicks.
The idea is that you don't do your single-click action right away but wait for a second click. If second click comes shortly, then your double click action gets triggered. Otherwise your single click action gets triggered after the delay.
Your code will look something like:
var singleClickTask = new Ext.util.DelayedTask(singleClickAction), // our delayed task for single click
singleClickDelay = 100; // delay in milliseconds
function onClick() {
singleClickTask.delay(singleClickDelay);
}
function onDblClick() {
// double click detected - trigger double click action
doubleClickAction();
// and don't forget to cancel single click task!
singleClickTask.cancel();
}
function singleClickAction() {
// something useful...
}
function doubleClickAction() {
// something useful...
}
// setting event handlers on an Element
elem.on('click', onClick);
elem.on('dblclick', onDblClick);
The obvious downsides are:
I don't know any better solution, and again, I discourage you from using both single and double clicks at the same time, this usually leads to a broken user experience.