Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击会干扰双击。如何解决这个问题?_Javascript_Jquery_Settimeout_Double Click - Fatal编程技术网

Javascript 单击会干扰双击。如何解决这个问题?

Javascript 单击会干扰双击。如何解决这个问题?,javascript,jquery,settimeout,double-click,Javascript,Jquery,Settimeout,Double Click,我有一个问题,我的单击事件不断干扰我的双击事件,因此即使我双击,也会调用单击事件 以下是我在上找到的解决方案之前的代码: grid.bind('change', function() { SearchPSelected(); }); $('#PGrid').delegate('tbody>tr', 'dblclick', function(e) { SearchPSelected(); GotoNextView(); }); 以下是我遵循解决方案后的代码: gr

我有一个问题,我的单击事件不断干扰我的双击事件,因此即使我双击,也会调用单击事件

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

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

$('#PGrid').delegate('tbody>tr', 'dblclick', function(e) {
    SearchPSelected();
    GotoNextView();
});
以下是我遵循解决方案后的代码:

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
    });

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

我解决了我的问题。下面是修复程序。我必须在上面的解决方案中删除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
            }
        });

因为click并不关心是否有双击。在同一个元素上使用“click”和“doubleclick”右键在web用户界面中效果不太好。你是什么意思?所以我不能让一个元素在单击和双击时有不同的动作?我尝试了一个解决方案,但对我无效。你可以同时拥有这两个,但两个事件都会触发。这就是它的工作原理。