2017-01-19 5 views
0

500ms後に「開く」APIコマンドを使用してコンテキストメニューを開く簡単なロングタッチ機能を使用しました。メニューが開きます。しかし、 "touchend"ではメニューが消えます。私が "touchend"の前にコンテキストメニューをタッチすると、それだけが残ります。この種の行動を防ぐ方法はありますか?ソースコードから、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); 
}; 

答えて

0

これを解決しました。 ContextMenuは正常に動作していましたが、タッチしていたDOMコントロールがtouchendのchangeイベント(テーブル行を強調表示する)を登録しました。そのため、タッチ&ホールド中にコンテキストメニューがポップアップしてから、touchendでDOMが変更されてクリアされました。

ハイライトテーブルの行イベントをtouchstartに手動で追加し、touchendのデフォルトを防ぐ(タッチ対象がテーブルの内側にあるとき)

関連する問題