私はツリーパネルを持っており、各ノードに対してシングルクリックとダブルクリックのイベントがあります。ダブルクリックするとシングルクリックイベントも発生します。どのようにダブルクリックしたときにシングルクリックイベントを発射するのを防ぐのですか?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. 「クリック」jqueryのダブルクリックを防ぐ方法
- 2. 保存ボタンをダブルクリックするのを防ぐ方法
- 3. ボタンを偶発的にダブルクリックするのを防ぐ
- 4. Semantic-ui-reactでonChangeイベントの発生を防ぐ方法
- 5. このSQLで発生するデッドロックを防ぐ方法
- 6. Javascriptが複数回発生するのを防ぐ方法
- 7. selectオプションでonclickイベントが発生するのを防ぐ方法
- 8. C#で例外が発生するのを防ぐ方法は?
- 9. Windows - エラーが発生したときにコンソールウィンドウが閉じるのを防ぐ
- 10. ESC extjsでウィンドウが閉じるのを防ぐ方法4
- 11. クラスコンストラクタでの発火を防ぐためにMobx.autorunを生成する方法は?
- 12. ユニティオブジェクトの傾きを防ぐ方法
- 13. java swing:ダブルクリックとして動作するシングルクリックイベント
- 14. Pythonアプリケーションを起動したときの動作をダブルクリックするのを防ぐには?
- 15. Google Scholarを削るときに503エラーが発生するのを防ぐ
- 16. JointJs Rectangleをダブルクリックするのを防ぐには?
- 17. 前に別のボタンをクリックしたときにonClickを防ぐ方法
- 18. 「戻る」をクリックしたときのスクロール効果を防ぐ方法
- 19. IsAjaxRequestを呼び出すときのHttpRequestValidationExceptionを防ぐ方法
- 20. コンテンツサイズを大きくするとコンテンツのオフセットを防ぐ方法
- 21. Array.forEachを使用するときのシーケンスを防ぐ方法
- 22. DjangoとPythonを使用したリモートファイルインジェクションを防ぐ方法
- 23. スレッドスターベートを防ぐ方法
- 24. セッションを防ぐ方法
- 25. セッションタイムアウトを防ぐ方法
- 26. HSTSを防ぐ方法は?
- 27. Ajaxキャッシングを防ぐ方法
- 28. enumコンストラクタを防ぐ方法
- 29. RealmとUICollectionViewでNSInternalInconsistencyExceptionを防ぐ方法
- 30. 開発にpushしたときにBitBucketがherokuにデプロイするのを防ぐ