【问题标题】:Single click interfering with double click. How can resolve this?单击会干扰双击。如何解决这个问题?
【发布时间】:2015-01-01 00:01:17
【问题描述】:

我有一个问题,我的单击事件一直干扰我的双击事件,即使我双击,单击事件也会被调用。

这是我在 SO 上找到解决方案之前的代码:

grid.bind('change', function() {
    SearchPSelected();
});

$('#PGrid').delegate('tbody>tr', 'dblclick', function(e) {
    SearchPSelected();
    GotoNextView();
});

这是我遵循 SO 解决方案后的代码:

grid = $('#PGrid').data('kendoGrid');

var DELAY = 700,
    clicks = 0,
    timer = null;

grid.on("click", function(e) {
        clicks++; //count clicks

        if (clicks === 1) {
            timer = setTimeout(function() {

                grid.bind('change', function() {
                    SearchPSelected();
                }); //perform single-click action    

                clicks = 0; //after action performed, reset counter
            }, DELAY);
        } else {
            clearTimeout(timer); //prevent single-click action

            $('#PGrid').delegate('tbody>tr', 'dblclick', function(e) {
                SearchPSelected();
                GotoNextView();
            }); //perform double-click action

            clicks = 0; //after action performed, reset counter
        }
    })
    .on("dblclick", function(e) {
        e.preventDefault(); //cancel system double-click event
    });

使用尝试的解决方案,没有任何调用(通过萤火虫的检查),我不知道为什么?我对 js 还是比较陌生(不是我选择的语言),所以我可能会遗漏一些东西?

【问题讨论】:

  • 因为点击不关心有没有双击。
  • 对 - 在同一个元素上使用“单击”和“双击”在 Web 用户界面中效果不佳。
  • 什么意思?所以我不能让单个元素对单击和双击具有不同的操作?我在 SO 上尝试了一个解决方案,但它对我不起作用。
  • 你可以同时拥有这两个,但两个事件都会触发。这就是它的设计方式。

标签: javascript jquery settimeout double-click


【解决方案1】:

我发现了我的问题。这是下面的修复。我不得不删除上述解决方案中的 click 和 dblclick 方法的冗余。

        var DELAY = 700,
        clicks = 0,
        timer = null;

        $('#PGrid').delegate('tbody>tr','click', function (e) {
            clicks++; //count clicks

            if (clicks === 1) {
                timer = setTimeout(function () {

                        SearchPSelected();

                    clicks = 0; //after action performed, reset counter
                }, DELAY);
            } else {
                clearTimeout(timer); //prevent single-click action

                    SearchSelected();
                    GotoNextView();

                clicks = 0; //after action performed, reset counter
            }
        });

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2019-05-15
    相关资源
    最近更新 更多