Не открывать меню при использовании сенсорных событий

Я подключил простую длинную сенсорную функцию, которая через 500 мс использует команду "открыть" API, чтобы открыть контекстное меню. Меню открывается. Однако при "прикосновении" меню исчезает. Он останется только, если я коснусь контекстного меню перед тем, как "коснуться". Есть ли способ предотвратить такое поведение? Исходя из исходного кода, только "touchstart" в другой части dom должен вызывать событие закрытия.

Код ниже, в случае необходимости. Не то, чтобы делегат tr требовался моим контекстным меню - чтобы объяснить использование переменной targetTr ниже.

var mobDevice_onLongTouch,
    mobDevice_touchTimer,
    mobDevice_longPressDuration = 500; //length of time we want the user to touch before we do something

//handle long press on the datatable
var touchArea = document.querySelector("#table");
touchArea.addEventListener("touchstart", touchAreaTouchStart, false);
touchArea.addEventListener("touchend", touchAreaTouchEnd, false);

function touchAreaTouchStart(e) {
    var targetTr = $(e.target).closest('tr');
    mobDevice_touchTimer = setTimeout(function () { touchArea_onLongTouch(targetTr) }, mobDevice_longPressDuration)
};
function touchAreaTouchEnd(e) {
    if (mobDevice_touchTimer) {
        clearTimeout(mobDevice_touchTimer) //reset the clock
    }
};

function touchArea_onLongTouch(target) {
    $('#table').contextmenu('open', target);
};

1 ответ

Я решил это. ContextMenu работал нормально, но элемент управления DOM, к которому я прикасался, зарегистрировал событие изменения (чтобы выделить строку таблицы) на touchend. Таким образом, контекстное меню всплывало во время касания и удержания, а затем очищалось при изменении DOM при касании.

Решение состояло в том, чтобы вручную добавить событие строки таблицы подсветки в touchstart и предотвращать дефолт при касании (когда цель касания находилась внутри таблицы)

Другие вопросы по тегам