Làm cách nào để phân biệt sự kiện nhấp một lần và sự kiện nhấp đúp?


116

Tôi có một nút duy nhất bằng li với id "my_id". Tôi đã đính kèm hai sự kiện jQuery với phần tử này

1.

$("#my_id").click(function() { 
    alert('single click');
});

2.

$("#my_id").dblclick(function() {
    alert('double click');
});

Nhưng mỗi lần nó mang lại cho tôi single click


Nhấp một lần sẽ luôn phải kích hoạt, không thể biết liệu nhấp đúp có xảy ra hay không trừ khi nó thực sự xảy ra trong thời gian nhấp đúp được chỉ định.
Pieter Germishuys

7
Điều này là có thể, hãy kiểm tra câu trả lời của tôi. Bạn phải đợi vài ms sau lần nhấp đầu tiên và kiểm tra xem có lần nhấp mới cho đến thời điểm được chỉ định hay không. Bằng cách đó, bạn có thể biết đây chỉ là một cú nhấp chuột đơn giản hay một cú đúp chuột.
Adrien Schuler,

Câu trả lời:


65

Bạn cần sử dụng thời gian chờ để kiểm tra xem có một lần nhấp khác sau lần nhấp đầu tiên hay không.

Đây là mẹo :

// Author:  Jacek Becela
// Source:  http://gist.github.com/399624
// License: MIT

jQuery.fn.single_double_click = function(single_click_callback, double_click_callback, timeout) {
  return this.each(function(){
    var clicks = 0, self = this;
    jQuery(this).click(function(event){
      clicks++;
      if (clicks == 1) {
        setTimeout(function(){
          if(clicks == 1) {
            single_click_callback.call(self, event);
          } else {
            double_click_callback.call(self, event);
          }
          clicks = 0;
        }, timeout || 300);
      }
    });
  });
}

Sử dụng:

$("button").single_double_click(function () {
  alert("Try double-clicking me!")
}, function () {
  alert("Double click detected, I'm hiding")
  $(this).hide()
})
<button>Click Me!</button>

BIÊN TẬP:

Như đã nêu bên dưới, ưu tiên sử dụng dblclicksự kiện gốc : http://www.quirksmode.org/dom/events/click.html

Hoặc cái do jQuery cung cấp: http://api.jquery.com/dblclick/


14
Nói chung, điều này có vẻ hoạt động tốt nhưng không phải thời gian trễ được phép giữa các lần nhấp (theo đó hai lần nhấp được hiểu là một lần nhấp đúp) có khác nhau theo cấu hình hệ thống không? Có lẽ sẽ an toàn hơn khi dựa vào dblclicksự kiện
Jon z

1
Vâng, tôi nghĩ bạn nói đúng, đây chắc chắn dblclicklà con đường để đi đến ngày hôm nay. jQuery cũng xử lý sự kiện này: api.jquery.com/dblclick
Adrien Schuler

14
@AdrienSchuler - Từ tài liệu mà bạn liên kết: Không thể liên kết trình xử lý với cả sự kiện nhấp chuột và dblclick cho cùng một phần tử. Câu hỏi là về việc có cả hai .
Álvaro González

Khi event.detailcó sẵn, đó là cách tốt nhất để phát hiện nhấp đúp từ trình xử lý nhấp chuột. Xem câu trả lời này .
Carl G

Giải pháp tuyệt vời Adrien, tôi cần nó cho trường hợp chúng ta có một sự kiện nhấp chuột đơn và nhấp đúp vào một đối tượng và chỉ một đối tượng được kích hoạt. Do đó giải pháp của bạn là hoàn hảo cho tôi. Tôi chỉ cải thiện nó một chút để kiểm soát "cái này": playcode.io/492022
LOstBrOkenKeY

79

Hành vi của dblclicksự kiện được giải thích tại Quirksmode .

Thứ tự các sự kiện của a dblclicklà:

  1. Di chuột xuống
  2. chuột lên
  3. nhấp chuột
  4. Di chuột xuống
  5. chuột lên
  6. nhấp chuột
  7. dblclick

Một ngoại lệ cho quy tắc này là (tất nhiên) Internet Explorer với thứ tự tùy chỉnh của chúng là:

  1. Di chuột xuống
  2. chuột lên
  3. nhấp chuột
  4. chuột lên
  5. dblclick

Như bạn có thể thấy, việc lắng nghe cả hai sự kiện cùng nhau trên cùng một phần tử sẽ dẫn đến các cuộc gọi bổ sung cho clicktrình xử lý của bạn .


dblclickthậm chí không chắc là đáng tin cậy ... nếu tôi nhấp một lần ... đợi một hoặc hai giây, sau đó nhấp lại, tôi sẽ nhận được dblclicksự kiện ở lần nhấp thứ hai!
Michael

Những cú nhấp chuột dài như vậy rất hữu ích, chẳng hạn để đổi tên tệp. Sẽ rất tuyệt nếu có tham số như 'longClick' để phân biệt nó.
PeterM

1
Khi event.detailcó sẵn, đó là cách tốt nhất để phát hiện nhấp đúp từ trình xử lý nhấp chuột. Xem câu trả lời này .
Carl G

38

Thay vì sử dụng nhiều trạng thái đặc biệt và setTimeout, hóa ra có một thuộc tính gốc được gọi là detailbạn có thể truy cập từ eventđối tượng!

element.onclick = event => {
   if (event.detail === 1) {
     // it was a single click
   } else if (event.detail === 2) {
     // it was a double click
   }
};

Các trình duyệt hiện đại và ngay cả IE-9 cũng hỗ trợ nó :)

Nguồn: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail


Câu trả lời hay nhất :)
sk8terboi87 ツ

3
Trong trường hợp nhấp đúp, một nhấp chuột duy nhất (ở đâu event.detail === 1) vẫn sẽ kích hoạt. Xem fiddle của tôi hoặc nhận xét này trên chủ đề này .
Fabien Snauwaert

Điểm tốt @FabienSnauwaert. Tôi đoán chúng ta không thể liên kết cả trình xử lý sự kiện nhấp chuột đơn và nhấp đúp vào một phần tử cụ thể; phương pháp trên rất hữu ích để xác định rõ ràng một lần nhấp đúp mà không cần dùng đến những thứ như hẹn giờ.
kyw 07/02/19

Bạn vẫn cần hẹn giờ cho lần nhấp đầu tiên đó để không kích hoạt. Kiểm tra câu trả lời của tôi bên dưới stackoverflow.com/questions/5497073/…

Chỉ là ghi chú trợ năng: nếu một sự kiện nhấp chuột được kích hoạt bởi bàn phím (ví dụ: khi người dùng nhấn vào để lấy tiêu điểm một nút và nhấn enter), sự kiện sẽ được tạo với thuộc tính chi tiết là 0, vì vậy hãy làm điều gì đó giống như if(evt.detail !== 1) return;từ chối ngẫu nhiên nhấp chuột sẽ chặn quyền truy cập vào nút đó đối với người dùng không có chuột.
gristow

25

Một chức năng đơn giản. Không cần jquery hoặc khuôn khổ khác. Chuyển các chức năng của bạn dưới dạng tham số

<div onclick="doubleclick(this, function(){alert('single')}, function(){alert('double')})">click me</div>
    <script>
        function doubleclick(el, onsingle, ondouble) {
            if (el.getAttribute("data-dblclick") == null) {
                el.setAttribute("data-dblclick", 1);
                setTimeout(function () {
                    if (el.getAttribute("data-dblclick") == 1) {
                        onsingle();
                    }
                    el.removeAttribute("data-dblclick");
                }, 300);
            } else {
                el.removeAttribute("data-dblclick");
                ondouble();
            }
        }
    </script>

2
Tôi nghĩ rằng đây là câu trả lời tốt nhất.Tuy nhiên, tôi đã phải giảm thời gian chờ xuống 200 để nó hoạt động trên Windows IE8, nhưng giá trị này có thể phụ thuộc vào hệ điều hành và người dùng. Và cũng đã lưu tham chiếu bộ đếm thời gian để có thể hủy thực hiện nhấp chuột nếu nhấp đúp được đăng ký.
xpereta

Cảm ơn bạn vì đoạn mã này, nó hoạt động tốt trên chrome và firefox (mặc dù chrome không cần bản hack này để hoạt động với dbl và single).
người chiến thắng

sử dụng el.dataset.dblclicksẽ là một cách tốt hơn để làm điều này ngay bây giờ.
WORMSS

Khi event.detailcó sẵn, đó là cách tốt nhất để phát hiện nhấp đúp từ trình xử lý nhấp chuột. Xem câu trả lời này .
Carl G

12

Tôi e rằng hành vi phụ thuộc vào trình duyệt:

Không thể chấp nhận ràng buộc các trình xử lý với cả sự kiện nhấp chuột và dblclick cho cùng một phần tử. Chuỗi sự kiện được kích hoạt khác nhau giữa các trình duyệt, với một số nhận được hai sự kiện nhấp chuột trước dblclick và những sự kiện khác chỉ một. Độ nhạy của nhấp đúp (thời gian tối đa giữa các nhấp chuột được phát hiện là nhấp đúp) có thể thay đổi tùy theo hệ điều hành và trình duyệt và thường do người dùng định cấu hình.

http://api.jquery.com/dblclick/

Chạy mã của bạn trong Firefox, cảnh báo () trong click()trình xử lý ngăn bạn nhấp vào lần thứ hai. Nếu bạn xóa cảnh báo như vậy, bạn sẽ nhận được cả hai sự kiện.


Khi event.detailcó sẵn, đó là cách tốt nhất để phát hiện nhấp đúp từ trình xử lý nhấp chuột. Xem câu trả lời này .
Carl G

11

Để nhấp đúp (nhấp hai lần), trước tiên bạn phải nhấp một lần. Trình click()xử lý sẽ kích hoạt trong lần nhấp đầu tiên của bạn và vì cảnh báo bật lên, bạn không có cơ hội thực hiện lần nhấp thứ hai để kích hoạtdblclick() trình xử lý.

Thay đổi trình xử lý của bạn để làm điều gì đó khác với một alert()và bạn sẽ thấy hành vi. (có thể thay đổi màu nền của phần tử):

$("#my_id").click(function() { 
    $(this).css('backgroundColor', 'red')
});

$("#my_id").dblclick(function() {
    $(this).css('backgroundColor', 'green')
});

7

Câu trả lời này đã lỗi thời theo thời gian, hãy kiểm tra giải pháp của @ kyw.

Tôi đã tạo một giải pháp lấy cảm hứng từ ý chính được đăng bởi @AdrienSchuler. Chỉ sử dụng giải pháp này khi bạn muốn liên kết một cú nhấp chuột VÀ một lần nhấp đúp vào một phần tử. Nếu không, tôi khuyên bạn nên sử dụng bản gốc clickdblclick người nghe.

Đây là những điểm khác biệt:

  • Vanillajs, Không phụ thuộc
  • Đừng chờ đợi trên setTimeout xử lý nhấp chuột hoặc xử lý nhấp đúp
  • Khi nhấp đúp, đầu tiên nó sẽ kích hoạt trình xử lý nhấp chuột, sau đó trình xử lý nhấp đúp

Javascript:

function makeDoubleClick(doubleClickCallback, singleClickCallback) {
    var clicks = 0, timeout;
    return function() {
        clicks++;
        if (clicks == 1) {
            singleClickCallback && singleClickCallback.apply(this, arguments);
            timeout = setTimeout(function() { clicks = 0; }, 400);
        } else {
            timeout && clearTimeout(timeout);
            doubleClickCallback && doubleClickCallback.apply(this, arguments);
            clicks = 0;
        }
    };
}

Sử dụng:

var singleClick = function(){ console.log('single click') };
var doubleClick = function(){ console.log('double click') };
element.addEventListener('click', makeDoubleClick(doubleClick, singleClick));

Dưới đây là cách sử dụng trong jsfiddle, nút jQuery là hành vi của câu trả lời được chấp nhận.

jsfiddle


2
Mã ở trên và phiên bản 'Vanilla' của fiddle của bạn không hoạt động ... đây là phiên bản Vanilla đã sửa: jsfiddle.net/jeum/cpbwx5vr/19
jeum 22/03/16

@jeum Nó vẫn làm thủ thuật đối với tôi trong mọi trình duyệt. Điều gì "không hoạt động" và bạn mong đợi điều gì? Có vẻ như phiên bản của bạn không làm những gì tôi dự định.
A1rPun

Fist Tôi đã sửa đổi phiên bản của mình (đã loại bỏ tính năng đóng kép), vui lòng thử phiên bản mới: jsfiddle.net/jeum/cpbwx5vr/20 Vấn đề với fiddle của bạn (phiên bản Vanilla) là nhấp đúp kích hoạt trình xử lý đơn: nó truy xuất đơn + gấp đôi cho tôi.
jeum

@jeum Cái đó báo lỗi. Ừ khác câu trả lời của tôi từ những câu trả lời chấp nhận và khác ở đây và tôi cũng xác định sự khác biệt này trong dòng này: cháy một nhấp chuột, sau đó một DoubleClick (không đi thẳng đến DoubleClick)
A1rPun

1
Có lại lỗi, vì vậy phiên bản này trả lời cho câu hỏi chính: jsfiddle.net/jeum/cpbwx5vr/21 . Bây giờ về phiên bản của bạn (đúng là tôi chưa hiểu), bạn có nhận thấy rằng 'jQuery' không đạt được những gì bạn muốn trong fiddle của bạn không?
jeum

5

Một giải pháp Vanilla đơn giản khác dựa trên câu trả lời A1rPun (xem tài liệu về giải pháp jQuery của anh ấy và cả hai đều nằm trong câu trả lời này ).

Có vẻ như KHÔNG kích hoạt trình xử lý nhấp một lần khi người dùng nhấp đúp, trình xử lý nhấp một lần nhất thiết phải được kích hoạt sau một khoảng thời gian trễ ...

var single = function(e){console.log('single')},
    double = function(e){console.log('double')};

var makeDoubleClick = function(e) {

  var clicks = 0,
      timeout;

  return function (e) {

    clicks++;

    if (clicks == 1) {
      timeout = setTimeout(function () {
        single(e);
        clicks = 0;
      }, 250);
    } else {
      clearTimeout(timeout);
      double(e);
      clicks = 0;
    }
  };
}
document.getElementById('btnVanilla').addEventListener('click', makeDoubleClick(), false);

3
Đây thực sự là giải pháp thay thế tốt nhất nếu bạn không muốn kích hoạt một cú nhấp chuột duy nhất :)
A1rPun

Khi event.detailcó sẵn, đó là cách tốt nhất để phát hiện nhấp đúp từ trình xử lý nhấp chuột. Xem câu trả lời này .
Carl G

5

Đây là một mã thay thế của mã jeum cho một số sự kiện tùy ý:

 var multiClickHandler = function (handlers, delay) {
    var clicks = 0, timeout, delay = delay || 250;
    return function (e) {
      clicks++;
      clearTimeout(timeout);
      timeout = setTimeout(function () {
        if(handlers[clicks]) handlers[clicks](e);
        clicks = 0;
      }, delay);
    };
  }

  cy.on('click', 'node', multiClickHandler({
    1: function(e){console.log('single clicked ', e.cyTarget.id())},
    2: function(e){console.log('double clicked ', e.cyTarget.id())},
    3: function(e){console.log('triple clicked ', e.cyTarget.id())},
    4: function(e){console.log('quadro clicked ', e.cyTarget.id())},
    // ...
  }, 300));

Cần cái này cho ứng dụng cytoscape.js .


Đẹp! chúng ta cũng có thể khai báo một biến mới bên trong hàm được trả về và gán nó với this, là phần tử được nhấp và chuyển nó cho trình xử lý (cùng với ehoặc thay vì nó).
HeyJude, 27/07/17

5

Làm thế nào để phân biệt giữa nhấp chuột đơn và nhấp đúp trên một và cùng một phần tử?

Nếu bạn không cần phải kết hợp chúng, bạn có thể dựa vào clickdblclickvà mỗi thứ sẽ thực hiện công việc tốt.

Một vấn đề nảy sinh khi cố gắng kết hợp chúng: một dblclicksự kiện sẽ thực sự kích hoạt một clicksự kiện , vì vậy bạn cần xác định xem một nhấp chuột duy nhất là nhấp chuột đơn "độc lập" hay là một phần của nhấp chuột đúp.

Ngoài ra: bạn không nên sử dụng cả hai clickdblclicktrên một và cùng một phần tử :

Không thể cố gắng liên kết các trình xử lý với cả sự kiện nhấp chuột và dblclick cho cùng một phần tử. Chuỗi sự kiện được kích hoạt thay đổi giữa các trình duyệt, với một số nhận được hai sự kiện nhấp chuột trước dblclick và những sự kiện khác chỉ một. Độ nhạy của nhấp đúp (thời gian tối đa giữa các nhấp chuột được phát hiện là nhấp đúp) có thể khác nhau tùy theo hệ điều hành và trình duyệt và thường do người dùng định cấu hình.
Nguồn: https://api.jquery.com/dblclick/

Bây giờ đến tin tốt:

Bạn có thể sử dụng thuộc tính của sự kiện detailđể phát hiện số lượng nhấp chuột liên quan đến sự kiện. Điều này làm cho nhấp đúp vào bên trongclick khá dễ phát hiện.

Vấn đề vẫn là phát hiện các nhấp chuột đơn lẻ và liệu chúng có phải là một phần của nhấp chuột kép hay không. Vì vậy, chúng tôi quay lại sử dụng bộ hẹn giờ vàsetTimeout .

Kết hợp tất cả lại với nhau, với việc sử dụng thuộc tính dữ liệu (để tránh biến toàn cục) và không cần tự tính số lần nhấp, chúng tôi nhận được:

HTML:

<div class="clickit" style="font-size: 200%; margin: 2em; padding: 0.25em; background: orange;">Double click me</div>

<div id="log" style="background: #efefef;"></div>

JavaScript:

<script>
var clickTimeoutID;
$( document ).ready(function() {

    $( '.clickit' ).click( function( event ) {

        if ( event.originalEvent.detail === 1 ) {
            $( '#log' ).append( '(Event:) Single click event received.<br>' );

            /** Is this a true single click or it it a single click that's part of a double click?
             * The only way to find out is to wait it for either a specific amount of time or the `dblclick` event.
             **/
            clickTimeoutID = window.setTimeout(
                    function() {
                        $( '#log' ).append( 'USER BEHAVIOR: Single click detected.<br><br>' );
                    },
                    500 // how much time users have to perform the second click in a double click -- see accessibility note below.
                );

        } else if ( event.originalEvent.detail === 2 ) {
            $( '#log' ).append( '(Event:) Double click event received.<br>' );
            $( '#log' ).append( 'USER BEHAVIOR: Double click detected.<br>' );
            window.clearTimeout( clickTimeoutID ); // it's a dblclick, so cancel the single click behavior.
        } // triple, quadruple, etc. clicks are ignored.

    });

});
</script>

Bản giới thiệu:

JSfiddle


Lưu ý về khả năng truy cập và tốc độ nhấp đúp:

  • Như Wikipedia đặt nó "Độ trễ tối đa cần thiết cho hai lần nhấp chuột liên tiếp được hiểu là một lần nhấp đúp không được chuẩn hóa."
  • Không có cách nào để phát hiện tốc độ nhấp đúp của hệ thống trong trình duyệt.
  • Có vẻ mặc định là 500 ms và phạm vi 100-900mms trên Windows ( nguồn )
  • Hãy nghĩ đến những người khuyết tật đặt tốc độ nhấp đúp trong cài đặt hệ điều hành của họ ở mức chậm nhất.
    • Nếu tốc độ nhấp đúp của hệ thống chậm hơn 500 ms mặc định của chúng tôi ở trên, thì cả hành vi nhấp một lần và nhấp đúp đều sẽ được kích hoạt.
    • Hoặc không sử dụng dựa vào kết hợp nhấp chuột đơn và nhấp đúp vào một và cùng một mục.
    • Hoặc: thêm cài đặt trong các tùy chọn để có khả năng tăng giá trị.

Phải mất một lúc để tìm ra giải pháp thỏa mãn, tôi hy vọng điều này sẽ hữu ích!


4

Sử dụng plugin jQuery Sparkle tuyệt vời. Plugin cung cấp cho bạn tùy chọn để phát hiện nhấp chuột đầu tiên và nhấp chuột cuối cùng. Bạn có thể sử dụng nó để phân biệt giữa nhấp chuột và dblclick bằng cách phát hiện xem liệu nhấp chuột khác có được theo sau bởi nhấp chuột đầu tiên hay không.

Kiểm tra nó tại http://balupton.com/sandbox/jquery-sparkle/demo/


3

Tôi đã viết một plugin jQuery đơn giản cho phép bạn sử dụng sự kiện 'singleclick' tùy chỉnh để phân biệt một lần nhấp chuột với một lần nhấp đúp:

https://github.com/omriyariv/jquery-singleclick

$('#someDiv').on('singleclick', function(e) {
    // The event will be fired with a small delay.
    console.log('This is certainly a single-click');
}

3

Câu trả lời đúng hiện đại là sự kết hợp giữa câu trả lời được chấp nhận và giải pháp của @kyw. Bạn cần một khoảng thời gian chờ để ngăn nhấp chuột đầu tiên đó và event.detailkiểm tra để ngăn nhấp chuột thứ hai.

const button = document.getElementById('button')
let timer
button.addEventListener('click', event => {
  if (event.detail === 1) {
    timer = setTimeout(() => {
      console.log('click')
    }, 200)
  }
})
button.addEventListener('dblclick', event => {
  clearTimeout(timer)
  console.log('dblclick')
})
<button id="button">Click me</button>


1

Tôi muốn tránh jquery (và 90-140k libs khác) và như các trình duyệt đã lưu ý xử lý onclick trước, vì vậy đây là những gì tôi đã làm trên trang web mà tôi đã tạo (ví dụ này cũng bao gồm việc lấy một vị trí được nhấp vào local xy)

clicksNow-0; //global js, owell

function notify2(e, right) {  // called from onclick= and oncontextmenu= (rc)
var x,y,xx,yy;
var ele = document.getElementById('wrap');  
    // offset fixed parent for local win x y
var xxx= ele.offsetLeft;
var yyy= ele.offsetTop;

//NScape
if (document.layers || document.getElementById&&!document.all) {
    xx= e.pageX;
    yy= e.pageY;
} else {
    xx= e.clientX;
    yy= e.clientY;
}
x=xx-xxx;
y=yy-yyy;

clicksNow++;
    // 200 (2/10ths a sec) is about a low as i seem to be able to go
setTimeout( "processClick( " + right + " , " + x + " , " + y + ")", 200);
}

function processClick(right, x, y) {
if (clicksNow==0) return; // already processed as dblclick
if (clicksNow==2) alert('dbl');
clicksNow=0;
    ... handle, etc ...
}

hy vọng điều đó sẽ giúp


2
URL đến trò chơi của bạn không cần thiết để hiểu câu trả lời của bạn. Tôi đang xóa nó để bài đăng này không bị coi là một nỗ lực để spam.
Andrew Barber,

1
trừ duy nhất, 200 là hằng số ma thuật và có thể thay đổi đáng kể tùy theo cài đặt chuột của người dùng trong hệ điều hành
Danubian Sailor

1

Dựa trên câu trả lời của Adrien Schuler (cảm ơn bạn rất nhiều !!!) cho Datatables.net và cho nhiều mục đích sử dụng, đây là một sửa đổi:

Chức năng

/**
 * For handle click and single click in child's objects
 * @param {any} selector Parents selector, like 'tr'
 * @param {any} single_click_callback Callback for single click
 * @param {any} double_click_callback Callback for dblclick
 * @param {any} timeout Timeout, optional, 300 by default
 */
jQuery.fn.single_double_click = function (selector, single_click_callback, double_click_callback, timeout) {
    return this.each(function () {
        let clicks = 0;
        jQuery(this).on('click', selector, function (event) {
            let self = this;
            clicks++;
            if (clicks == 1) {
                setTimeout(function () {
                    if (clicks == 1) {
                        single_click_callback.call(self, event);
                    } else {
                        double_click_callback.call(self, event);
                    }
                    clicks = 0;
                }, timeout || 300);
            }
        });
    });
}

Sử dụng

$("#MyTableId").single_double_click('tr',
            function () {   //  Click
                let row = MyTable.row(this);
                let id = row.id();
                let data = row.data();
                console.log("Click in "+id+" "+data);
            },
            function () {   //  DBLClick
                let row = MyTable.row(this);
                let id = row.id();
                let data = row.data();
                console.log("DBLClick in "+id+" "+data);
            }
        );

0

điều này đã làm việc cho tôi–

var clicked=0;
function chkBtnClcked(evnt) {
    clicked++;
    // wait to see if dblclick
    if (clicked===1) {
        setTimeout(function() {
            clicked=0;
            .
            .
        }, 300); // test for another click within 300ms
    }
    if (clicked===2) {
        stopTimer=setInterval(function() {
            clicked=0;
            .
            .
        }, 30*1000); // refresh every 30 seconds
    }
}

sử dụng-

<div id="cloneimages" style="position: fixed;" onclick="chkBtnClcked(evnt)"  title="Click for next pic; double-click for slide show"></div>

0

Chỉ đăng câu trả lời HTML gốc trong trường hợp cần thiết là dễ dàng và HTML.

<p ondblclick="myFunction()" id = 'id'>Double-click me</p>

Tất nhiên điều này có các tùy chọn Jquery gốc. tức là ... $('#id').attr('ondblclick',function(){...})hoặc, như đã nêu trước đây,$('#id').dblclick(function(){...});


0

Tôi biết điều này đã cũ, nhưng dưới đây là một ví dụ JS duy nhất về bộ đếm vòng lặp cơ bản với bộ đếm thời gian duy nhất để xác định một nhấp chuột đơn và nhấp đúp. Hy vọng rằng điều này sẽ giúp ai đó.

var count = 0;
var ele = document.getElementById("my_id");
ele.addEventListener('click', handleSingleDoubleClick, false); 

function handleSingleDoubleClick()
{
  if(!count) setTimeout(TimerFcn, 400); // 400 ms click delay
  count += 1;
}
function TimerFcn() 
{
  if(count > 1) console.log('you double clicked!')
  else console.log('you single clicked')
  count = 0;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.