2013-08-19 35 views

Trả lời

13

Bạn phải làm của bạn "sở hữu" phát hiện DoubleClick

Something như thế có thể làm việc:

var clickedOnce = false; 
var timer; 

$("#test").bind("click", function(){ 
    if (clickedOnce) { 
     run_on_double_click(); 
    } else { 
     timer = setTimeout(function() { 
      run_on_simple_click(parameter); 
     }, 150); 
     clickedOnce = true; 
    } 
}); 

function run_on_simple_click(parameter) { 
    alert(parameter); 
    alert("simpleclick"); 
    clickedOnce = false; 
} 

function run_on_double_click() { 
    clickedOnce = false; 
    clearTimeout(timer); 
    alert("doubleclick"); 
} 

Đây là một công tác JSFiddle

Để biết thêm thông tin về những gì trì hoãn bạn nên sử dụng cho bộ hẹn giờ của bạn, hãy xem tại đây: How to use both onclick and ondblclick on an element?

+0

Không có thiết bị nào hoạt động bình thường. Kiểm tra lại lần nữa –

+0

Nên được sửa –

+0

Tôi nghĩ chúng ta nên làm điều gì đó như sau: Đợi chức năng nhấp.Nếu không có gì xảy ra trong một giây hoặc lâu hơn sau hàm nhấp chuột thì hãy cảnh báo ("nhấp chuột duy nhất"). Hoặc nếu có một sự kiện nhấp chuột khác trong vòng một giây sau lần nhấp đầu tiên thì hãy cảnh báo ("nhấp chuột dbl"). Bạn nghĩ sao? –

3
$("#test-id").bind("click dblclick", function(){alert("hello")}); 

trình cho cả chuột và dblclick

EDIT -

Tôi nghĩ mình không thể. Tôi đã thử một cái gì đó như thế này.

$("#test").bind({ 
    dblclick: function(){alert("Hii")}, 
    mousedown: function(){alert("hello")} 

}); 

Nhưng không thể đạt được nhấp đúp mà không phải trải qua một cú nhấp chuột. Tôi đã thử di chuột xuống nhưng không đưa ra bất kỳ giải pháp nào.

+0

Cách liên kết các chức năng khác nhau với hai sự kiện này? – SolessChong

+0

Vì vậy, bạn muốn có một trong hai chức năng riêng biệt. Một cho nhấp chuột duy nhất và một cho nhấp đúp? –

+0

Bạn có thể nên thực hiện một nhấp đúp tùy chỉnh, bởi vì thực tế là không thể phát hiện được liệu nhấp chuột có phải là một cú nhấp chuột nguyên bản hay không, vì nhấp đúp chuột bao gồm hai lần nhấp. Chỉ cần sử dụng một chức năng mà bạn kiểm tra xem người dùng có nhấp chuột hai lần trong một khoảng thời gian xác nhận không. –

0

bạn cần phải theo dõi nhấp đúp và nếu nó không phải là gấp đôi c liếm thực hiện hành động nhấp chuột. Hãy thử

<p id="demo"></p> 
<button id='btn'>Click and DoubleClick</button> 
<script> 
var doubleclick =false; 
var clicktimeoutid = 0; 
var dblclicktimeoutid = 0; 
var clickcheck = function(e){ 
    if(!clicktimeoutid) 
     clicktimeoutid = setTimeout(function(){ 
      if(!doubleclick) 
       performclick(e); 
      clicktimeoutid =0; 
     },300); 
} 

var performclick =function(e){ 
    document.getElementById("demo").innerHTML += 'click'; 
} 
var performdblclick = function(e) 
{ 
    doubleclick = true; 
    document.getElementById("demo").innerHTML += 'dblclick'; 
    dblclicktimeoutid = setTimeout(function(){doubleclick = false},800); 
}; 
document.getElementById("btn").ondblclick = performdblclick; 
document.getElementById("btn").onclick=clickcheck; 
</script> 
0

tôi khá nhiều sử dụng logic này giống như Jeremy D.

Tuy nhiên, trong trường hợp của tôi, nó là gọn gàng hơn để giải quyết điều này với các chức năng ẩn danh, và một chút thời gian chờ nhấn đúp chuột chậm :

dblclick_timer = false 
.on("click", function(d) { 
    // if double click timer is active, this click is the double click 
    if (dblclick_timer) 
    { 
     clearTimeout(dblclick_timer) 
     dblclick_timer = false 
     // double click code code comes here 
     console.log("double click fired") 
    } 
    // otherwise, what to do after single click (double click has timed out) 
    else dblclick_timer = setTimeout(function(){ 
     dblclick_timer = false 
     // single click code code comes here 
     console.log("single click fired") 
    }, 250) 
}) 
0

cách tiếp cận hơi khác - Lần so sánh nhấp thực tế xảy ra sau trong khoảng thời gian định trước, chúng tôi chỉ cần giữ tab trên cờ.

& với một số sửa đổi đơn giản (nhấp chuột thay vì cờ) nó cũng có thể được mở rộng đến bất kỳ số nhấp chuột liên tiếp nhanh nào (ba lần nhấp, et al), bị giới hạn bởi tính thực tiễn.

var clicked = false, 
    dblClicked = false, 
    clickTimer; 



function onClick(param){ 
    console.log('Node clicked. param - ',param); 
}; 

function onDoubleClick(param){ 
    console.log('Node Double clicked. param - ',param); 
}; 

function clickCheck(param){ 
    if (!clicked){ 
     clicked = true; 
     clickTimer = setTimeout(function(){ 
      if(dblClicked){ 
       onDoubleClick(param); 
      } 

      else if(clicked){ 
       onClick(param); 
      } 

      clicked = false; 
      dblClicked = false; 
      clearTimeout(clickTimer); 

     },150); 
    } else { 
     dblClicked = true; 
    } 
};