私はツリーパネルを持っており、各ノードに対してシングルクリックとダブルクリックのイベントがあります。ダブルクリックするとシングルクリックイベントも発生します。どのようにダブルクリックしたときにシングルクリックイベントを発射するのを防ぐのですか?extjsをダブルクリックしたときのシングルクリックイベントの発生を防ぐ方法
5
A
答えて
8
通常、を使用しています。シングルクリックとダブルクリックのイベントは悪い習慣とみなされ、非常に推奨されません。
しかし、これをやりたければ、シングルクリックとダブルクリックを区別できる唯一の方法は、クリック間の時間を測定することによって人為的にこの差異を追加することです。
ワンクリックアクションをすぐには実行しないで、2回目のクリックを待つという考えがあります。まもなく2回目のクリックが来ると、ダブルクリックアクションが発生します。それ以外の場合、遅延後にクリック操作がトリガーされます。
はあなたのコードのようなものになります。
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);
を明らかに欠点がある:
- 異なるOSでシングルクリックアクション
- のための遅延が異なる設定が可能がありますダブルクリックを引き起こすクリック間隔のため、ハードコーディングsingleClickDelayは信頼性がありません
- JavaScriptタイマーは100%正確ではありませんパフォーマンスの異なるシステムで結果が異なる可能性があります。
私はこれ以上の解決策を知らず、同時にシングルクリックとダブルクリックの両方を使用しないことをお勧めします。これは通常、ユーザーエクスペリエンスの崩壊につながります。
1
2番目のクリックイベントではなく、1番目のクリックイベントでアクションを実行する方がよいと思います。これを行うには、各クリックイベントをチェックするブール値を設定します。
このコードは、アプローチを実証
onGridRowClick: function(view, record, item, index, e, eOpts) {
if (record._task_in_progress) {
return;
}
// Let the second click as part of the double click to be ignored
record._task_in_progress = true;
// Emulating async task here
setTimeout(function() {
record._task_in_progress = false;
}, 1000);
}
関連する問題
- 1. ボタンを偶発的にダブルクリックするのを防ぐ
- 2. selectオプションでonclickイベントが発生するのを防ぐ方法
- 3. C#で例外が発生するのを防ぐ方法は?
- 4. このSQLで発生するデッドロックを防ぐ方法
- 5. Windows - エラーが発生したときにコンソールウィンドウが閉じるのを防ぐ
- 6. クラスコンストラクタでの発火を防ぐためにMobx.autorunを生成する方法は?
- 7. ESC extjsでウィンドウが閉じるのを防ぐ方法4
- 8. java swing:ダブルクリックとして動作するシングルクリックイベント
- 9. Pythonアプリケーションを起動したときの動作をダブルクリックするのを防ぐには?
- 10. 「戻る」をクリックしたときのスクロール効果を防ぐ方法
- 11. セッションタイムアウトを防ぐ方法
- 12. セッションを防ぐ方法
- 13. Ajaxキャッシングを防ぐ方法
- 14. Pythonの終了時にエラーが発生するのを防ぐ
- 15. フォームのアクションがasp.netで発生するのを防ぐには
- 16. PLYのテーブル再生成を防ぐ方法
- 17. Box2Dのセンサオブジェクトのトンネリングを防ぐ方法
- 18. プログラムを終了した後のコンソール出力を防ぐ方法
- 19. Assembly.GetTypes()を呼び出すときにReflectionTypeLoadExceptionを防ぐ方法
- 20. jQuery UI - Shakeエフェクトが複数回発生するのを防ぐ
- 21. cinのコンソール出力を防ぐ方法
- 22. 画面上のタップを防ぐ方法
- 23. iframe内のポップアップを防ぐ方法は?
- 24. hammer.jsでデフォルトのタッチを防ぐ方法
- 25. brunch watch -sのキャッシングを防ぐ方法
- 26. TFSでのマージを防ぐ方法
- 27. JavaScriptのメモリリークを防ぐ方法
- 28. xsdファイルのmaxOccurs = "unbounded"を防ぐ方法
- 29. ハイチャートの列オーバーラップを防ぐ方法
- 30. ウェブページのスケーリングを防ぐ方法