Думаю, нужно определять не длинный клик, а короткий (идём от противного). А вместо понятия «
длинный клик» ввести термин «
удержание», т. к. меню должно появиться, например, через 1000 миллисекунд после того, как кнопка мыши нажата (и не важно, была ли она
уже отпущена).
Поэтому предполагаемый алгоритм такой:
var timer_id = 0; //глобальная переменная, хранящая ID таймера
var menu = false; //переменная, хранящая информацию о том, отработал ли длинный клик
//При нажатии кнопки мыши инициилизируем таймер с задержкой 1000 мс
$("#object_id").mousedown(function(){ timer_id = setTimeout('showMenu()', 1000) });
//При отпускании кнопки мыши отменяем таймер и выполняем действие быстрого клика (если длинный клик не отработал)
$("#object_id").mouseup(function(){ clearTimeout(timer_id); if(!menu) fastClick(); });
//Функция, которая показывает меню
function showMenu()
{
menu = true;
}
//Функция, которая отрабатывает при коротком клике
function fastClick()
{
}