কীভাবে একক ক্লিক ইভেন্ট এবং ডাবল ক্লিক ইভেন্টকে আলাদা করতে হবে?


116

আইডি সহ আমার লি একটি একক বোতাম আছে "my_id"। আমি এই উপাদানটির সাথে দুটি jQuery ইভেন্ট সংযুক্ত করেছি

1।

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

2।

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

তবে প্রতিবারই এটি আমাকে দেয় single click


একক ক্লিকে সর্বদা আগুন জ্বলতে হবে, নির্দিষ্ট ডাবল ক্লিকের সময়টি যদি না ঘটে তবে ডাবল ক্লিক হচ্ছে কিনা তা জানা অসম্ভব।
পিটার জার্মিচুইস

7
এটি সম্ভব, আমার উত্তরটি পরীক্ষা করুন। প্রথম ক্লিকের পরে আপনাকে কয়েক এমএস অপেক্ষা করতে হবে এবং নির্দিষ্ট সময় পর্যন্ত নতুন ক্লিক আছে কিনা তা পরীক্ষা করে দেখতে হবে। এইভাবে, আপনি জানতে পারবেন এটি কেবল একটি সাধারণ বা ডাবল ক্লিক কিনা।
অ্যাড্রিয়েন শুলার

উত্তর:


65

প্রথম ক্লিকের পরে আর কোনও ক্লিক আছে কিনা তা পরীক্ষা করতে আপনাকে একটি টাইমআউট ব্যবহার করতে হবে।

কৌশলটি এখানে :

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

ব্যবহার:

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

সম্পাদনা করুন:

নীচে যেমন বলা হয়েছে, স্থানীয় dblclickইভেন্টটি ব্যবহার করতে পছন্দ করুন : http://www.quirksmode.org/dom/events/click.html

অথবা jQuery দ্বারা সরবরাহিত একটি: http://api.jquery.com/dblclick/


14
এটি সাধারণভাবে দুর্দান্তভাবে কাজ করবে বলে মনে হচ্ছে কিন্তু ক্লিকের মধ্যে ল্যাগ টাইম (যা দ্বারা দুটি ক্লিককে ডাবল ক্লিক হিসাবে ব্যাখ্যা করা হয়) সিস্টেম কনফিগারেশন দ্বারা পৃথক হয় না? dblclickইভেন্টটির উপর নির্ভর করা সম্ভবত নিরাপদ
জন z

1
হ্যাঁ, আমি মনে করি আপনি ঠিক বলেছেন, dblclickএটিই আজকের রাস্তাটি itive jQuery এছাড়াও এই ইভেন্টটি পরিচালনা করে: api.jquery.com/dblclick
অ্যাড্রিয়েন শুলার

14
@ অ্যাড্রিয়েনশুলার - আপনি যে ডকটি সংযুক্ত করেছেন তা থেকে: হ্যান্ডলারদের একই উপাদানটির জন্য ক্লিক এবং ডিবিএলক্লিক ইভেন্ট উভয়কে আবদ্ধ করা অনাকাঙ্ক্ষিত। প্রশ্ন উভয় থাকার সম্পর্কে হয় ।
vlvaro González

যখন event.detailউপলভ্য থাকে, ক্লিক হ্যান্ডলার থেকে ডাবল-ক্লিক সনাক্ত করার সেরা উপায়। এই উত্তর দেখুন ।
কার্ল জি

চমৎকার সমাধান অ্যাড্রিয়েন, আমার এমন একটি মামলার প্রয়োজন যেখানে আমাদের একটি জিনিসে একক এবং ডাবল ক্লিক ইভেন্ট রয়েছে এবং কেবল একটি বরখাস্ত করা উচিত। সুতরাং আপনার সমাধান আমার জন্য নিখুঁত। "এটি" নিয়ন্ত্রণে আনতে
LOstBrOkenKeY

79

অনুষ্ঠানের আচরণটি কুইর্কসোডেdblclick ব্যাখ্যা করা হয়েছে ।

একটির জন্য ইভেন্টগুলির ক্রম dblclickহ'ল:

  1. mousedown
  2. mouseup
  3. ক্লিক
  4. mousedown
  5. mouseup
  6. ক্লিক
  7. dblclick

এই নিয়মের একটি ব্যতিক্রম হ'ল (অবশ্যই) তাদের কাস্টম ক্রম সহ ইন্টারনেট এক্সপ্লোরার:

  1. mousedown
  2. mouseup
  3. ক্লিক
  4. mouseup
  5. dblclick

আপনি দেখতে পাচ্ছেন, একই উপাদানগুলিতে একসাথে উভয় ইভেন্ট শোনার ফলে আপনার clickহ্যান্ডলারের অতিরিক্ত কল আসবে calls


নিশ্চিত নয় dblclickএমনকি নির্ভরযোগ্য ... আমি যদি একবার ক্লিক করি ... এক বা দুটি অপেক্ষা করুন, তবে আবার ক্লিক করুন, আমি dblclickদ্বিতীয় ক্লিকটিতে একটি ইভেন্ট পাব !
মাইকেল

ফাইলগুলির নামকরণের জন্য উদাহরণস্বরূপ এ জাতীয় দীর্ঘ ক্লিকগুলি কার্যকর। এটি আলাদা করার জন্য 'লং ক্লিক'-এর মতো প্যারামিটার থাকলে খুব ভাল।
পিটারএম

1
যখন event.detailউপলভ্য থাকে, ক্লিক হ্যান্ডলার থেকে ডাবল-ক্লিক সনাক্ত করার সেরা উপায়। এই উত্তর দেখুন ।
কার্ল জি

38

আরও বেশি অ্যাড-হক স্টেটস এবং সেটটাইমআউট ব্যবহার করার পরিবর্তে দেখা যাচ্ছে যে একটি দেশীয় সম্পত্তি রয়েছে detailযা আপনি eventঅবজেক্ট থেকে অ্যাক্সেস করতে পারবেন !

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

আধুনিক ব্রাউজার এবং এমনকি আই -9 এটি সমর্থন করে :)

সূত্র: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail


সেরা উত্তর :)
sk8terboi87 ツ

3
ডাবল ক্লিকের ক্ষেত্রে, একটি একক ক্লিক (যেখানে event.detail === 1) এখনও ট্রিগার করবে। আমার থাবা বা এই থ্রেডে এই মন্তব্য দেখুন ।
ফ্যাবিয়েন স্নাউয়ার্ট

ভাল পয়েন্ট @ ফ্যাবিএনসনওয়ার্ট। আমি অনুমান করি যে আমরা একটি নির্দিষ্ট উপাদানগুলিতে একক এবং ডাবল ক্লিক ইভেন্ট হ্যান্ডলার উভয়কেই আবদ্ধ করতে পারি না; উপরের পদ্ধতিটি টাইমারের মতো স্টাফগুলিকে অবলম্বন না করে অবশ্যই ডাবল ক্লিকটি নির্ধারণে কার্যকর।
KYW

অগ্নিকাণ্ড না করার জন্য আপনার প্রথম ক্লিকটিতে এখনও একটি টাইমার দরকার। নীচের আমার উত্তর চেক stackoverflow.com/questions/5497073/...

কেবলমাত্র একটি অ্যাক্সেসিবিলিটি নোট: যদি কোনও ক্লিকের ইভেন্টটি কোনও কীবোর্ড দ্বারা চালিত হয় (উদাহরণস্বরূপ, যখন কোনও ব্যবহারকারী কোনও বোতাম ফোকাস করতে এবং এন্ট্রি টিপুন), ঘটনাটি বিশদ সম্পত্তি হিসাবে 0 হিসাবে উত্পন্ন হয়, তাই if(evt.detail !== 1) return;দুর্ঘটনাকবলিত দ্বিগুণ প্রত্যাখ্যান করার মতো কিছু করে ক্লিকগুলি মাউস ছাড়াই ব্যবহারকারীদের জন্য সেই বোতামটিতে অ্যাক্সেস আটকাবে।
গ্রিস্টো

25

একটি সাধারণ ফাংশন। কোন jquery বা অন্যান্য কাঠামো প্রয়োজন হয় না। পরামিতি হিসাবে আপনার ফাংশন পাস

<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
আমি মনে করি এটি সেরা উত্তর হওয়া উচিত ow যাইহোক, উইন্ডোজ আই 8 এ কাজ করার জন্য আমাকে সময়সীমা 200 টি হ্রাস করতে হয়েছিল তবে এই মানটি ওএস এবং ব্যবহারকারী নির্ভর হতে পারে। এবং ডাবল ক্লিক নিবন্ধিত হলে ক্লিকের কার্যকরকরণ বাতিল করতে সক্ষম হতে টাইমার রেফারেন্সটিও সংরক্ষণ করে।
xpereta

এই অংশের কোডের জন্য আপনাকে ধন্যবাদ, এটি ক্রোম এবং ফায়ারফক্সে দুর্দান্ত কাজ করে (যদিও ডিবিএল এবং একক সাথে কাজ করার জন্য ক্রোমের এই হ্যাকের প্রয়োজন নেই)।
বিজয়ী

ব্যবহার el.dataset.dblclickকরা এখন এটি করার একটি দুর্দান্ত উপায় হবে।
ওয়ার্ল্ডএসএস

যখন event.detailউপলভ্য থাকে, ক্লিক হ্যান্ডলার থেকে ডাবল-ক্লিক সনাক্ত করার সেরা উপায়। এই উত্তর দেখুন ।
কার্ল জি

12

আমি আশঙ্কা করি যে আচরণটি ব্রাউজার নির্ভর:

হ্যান্ডলারদের একই উপাদানটির জন্য ক্লিক এবং ডিবিএলক্লিক ইভেন্ট উভয়কে আবদ্ধ করা অযথাই। ট্রিগার হওয়া ইভেন্টগুলির ক্রমটি ব্রাউজার থেকে ব্রাউজারে পরিবর্তিত হয়, কিছুগুলি ডিবিএলক্লিকের আগে দুটি ক্লিক ইভেন্ট পেয়ে থাকে এবং অন্যরা কেবলমাত্র একটিতে। ডাবল ক্লিক সংবেদনশীলতা (ক্লিকের মধ্যে সর্বাধিক সময় যা ডাবল ক্লিক হিসাবে সনাক্ত করা হয়) অপারেটিং সিস্টেম এবং ব্রাউজারের দ্বারা পরিবর্তিত হতে পারে এবং প্রায়শই ব্যবহারকারী-কনফিগারযোগ্য হয়।

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

ফায়ারফক্সে আপনার কোড চালানো, click()হ্যান্ডলারের সতর্কতা () আপনাকে দ্বিতীয়বার ক্লিক করতে বাধা দেয়। আপনি যদি এই ধরনের সতর্কতা অপসারণ করেন তবে আপনি উভয় ইভেন্ট পান।


যখন event.detailউপলভ্য থাকে, ক্লিক হ্যান্ডলার থেকে ডাবল-ক্লিক সনাক্ত করার সেরা উপায়। এই উত্তর দেখুন ।
কার্ল জি

11

ওয়েল ডাবল ক্লিক করতে (দুইবার ক্লিক করুন) আপনাকে প্রথমে একবার ক্লিক করতে হবে। click()হ্যান্ডলার দাবানল আপনার প্রথম ক্লিকের মাধ্যমে এবং যেহেতু সতর্কতা পপ আপ, আপনি আগুনে দ্বিতীয় ক্লিকের করতে একটি সুযোগ হবে না dblclick()হ্যান্ডলার।

আপনার হ্যান্ডলারগুলি একটি ব্যতীত অন্য কিছু করতে পরিবর্তন করুন alert()এবং আপনি আচরণটি দেখতে পাবেন। (সম্ভবত উপাদানটির পটভূমির রঙ পরিবর্তন করুন):

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

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

7

এই উত্তরটি সময়ের সাথে অচল হয়ে যায়, @ কেইডাব্লু এর সমাধানটি পরীক্ষা করে দেখুন।

আমি @ অ্যাড্রিয়েনশুলার দ্বারা পোস্ট করা টুকরোটি দ্বারা অনুপ্রাণিত একটি সমাধান তৈরি করেছি। আপনি যখন কোনও একক ক্লিক এবং কোনও উপাদানকে ডাবল ক্লিক করতে চান কেবল তখনই এই সমাধানটি ব্যবহার করুন। অন্যথায় আমি নেটিভ clickএবং dblclickশ্রোতাদের ব্যবহার করার পরামর্শ দিই ।

এই পার্থক্যগুলি:

  • ভ্যানিলাজ, কোনও নির্ভরতা নেই
  • setTimeoutক্লিক বা ডাবলিক্লিক হ্যান্ডলারটি হ্যান্ডেল করতে অপেক্ষা করবেন না
  • ডাবল ক্লিক করার পরে প্রথমে ক্লিক হ্যান্ডলারের আগুন জ্বলতে থাকে, তারপরে ডাবলিক্লিক হ্যান্ডলার

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

ব্যবহার:

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

নীচে একটি জেসফিডেলের ব্যবহার রয়েছে, jQuery বোতামটি গৃহীত উত্তরের আচরণ।

jsfiddle


2
উপরের কোড এবং আপনার ফিডলের
jeum

@ জিউম এটি এখনও প্রতিটি ব্রাউজারে আমার জন্য কৌশল করে। কোনটি "কাজ করে না" এবং আপনি কী আশা করেন? দেখে মনে হচ্ছে আপনার সংস্করণটি আমি যা করতে চাইছিলাম তা করছে না।
আরপুন

প্রথম স্থানটি আমি আমার সংস্করণটি সংশোধন করেছি (ডাবল ক্লোজার অপসারণ), দয়া করে নতুনটি চেষ্টা করুন: jsfiddle.net/jeum/cpbwx5vr/20 আপনার ফিডল (ভ্যানিলা সংস্করণ) এর সাথে সমস্যাটি হ'ল ডাবল ক্লিকটি একক হ্যান্ডলারকে ট্রিগার করে: এটি একক পুনরুদ্ধার করে আমার জন্য দ্বিগুণ
জিউম

@ জিউম এটি একটি ত্রুটি দেয়। হ্যাঁ আমার উত্তর এখানে গৃহীত এবং অন্যান্য উত্তরগুলির চেয়ে পৃথক এবং আমি এই লাইনের মধ্যে এই পার্থক্যটিও নির্দিষ্ট করেছি: একটি ক্লিক ফায়ার করুন, তারপরে একটি ডাবলিক্লিক করুন (সরাসরি
ডাবলক্লিকের দিকে

1
হ্যাঁ ত্রুটি আবার, সুতরাং এই সংস্করণটি মূল প্রশ্নের জবাব দেয়: jsfiddle.net/jeum/cpbwx5vr/21 । এখন আপনার সংস্করণটি সম্পর্কে (এটি সত্য যে আমি বুঝতে পারি নি), আপনি কি লক্ষ্য করেছেন যে 'jQuery' আপনার ফিডলে যা চান তা অর্জন করে না?
জিউম

5

আরেকটি সহজ ভ্যানিলা সমাধান উপর ভিত্তি করে A1rPun উত্তর (দেখুন তার বেহালার jQuery এর সমাধান জন্য, এবং উভয় আছে এই এক )।

দেখে মনে হয় যে কোনও একক-ক্লিক হ্যান্ডলারটি যখন ব্যবহারকারী ডাবল-ক্লিক করে না, সিঙ্গল-ক্লিক হ্যান্ডলারটি অবিরামভাবে বিলম্বের পরে ট্রিগার হয় ...

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
আপনি যদি একক ক্লিক বরখাস্ত না করতে চান তবে এটি অবশ্যই সেরা বিকল্প :)
আরপুন

যখন event.detailউপলভ্য থাকে, ক্লিক হ্যান্ডলার থেকে ডাবল-ক্লিক সনাক্ত করার সেরা উপায়। এই উত্তর দেখুন ।
কার্ল জি

5

ইভেন্টের স্বেচ্ছাসেবী সংখ্যার জন্য এখানে জিমের কোডের বিকল্প রয়েছে:

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

একটি সাইটোস্কেপ.জেএস অ্যাপ্লিকেশানের জন্য এটির দরকার ।


নিস! আমরা ফিরে ফাংশনটির অভ্যন্তরে একটি নতুন ভেরিয়েবল ঘোষণা করতে পারি এবং এটিকে বরাদ্দ করতে পারি this, এটি ক্লিক করা উপাদান, এবং এটি হ্যান্ডলারের কাছে (পাশাপাশি eবা এর পরিবর্তে) প্রেরণ করতে পারে ।
আরে

5

একক ক্লিক এবং এক এবং একই উপাদানটিতে ডাবল ক্লিকের মধ্যে পার্থক্য কীভাবে?

আপনি তাদের মিশ্রিত করা প্রয়োজন হবে না থাকে, তাহলে আপনি উপর নির্ভর করতে পারেন clickএবং dblclickএবং প্রতিটি শুধু জরিমানা কাজ হবে।

তাদের মিশ্রিত করার চেষ্টা করার সময় একটি সমস্যা দেখা দেয়: একটি dblclickইভেন্ট আসলে একটি clickইভেন্টকেও ট্রিগার করবে , সুতরাং আপনার একক ক্লিকটি "স্ট্যান্ড-অলোন" একক ক্লিক বা ডাবল ক্লিকের অংশ কিনা তা নির্ধারণ করতে হবে।

অতিরিক্ত: আপনার clickএবং dblclickএক এবং একই উপাদান উভয় ব্যবহার করা উচিত নয় :

হ্যান্ডলারদের একই উপাদানটির জন্য ক্লিক এবং ডিবিএলক্লিক ইভেন্ট উভয়কে আবদ্ধ করা অযথাই। ট্রিগার হওয়া ইভেন্টগুলির ক্রমটি ব্রাউজার থেকে ব্রাউজারে পরিবর্তিত হয়, কিছুগুলি ডিবিএলক্লিকের আগে দুটি ক্লিক ইভেন্ট পেয়ে থাকে এবং অন্যরা কেবলমাত্র একটিতে। ডাবল ক্লিক সংবেদনশীলতা (ক্লিকের মধ্যে সর্বাধিক সময় যা ডাবল ক্লিক হিসাবে সনাক্ত করা হয়) অপারেটিং সিস্টেম এবং ব্রাউজারের দ্বারা পরিবর্তিত হতে পারে এবং প্রায়শই ব্যবহারকারী-কনফিগারযোগ্য হয়।
সূত্র: https://api.jquery.com/dblclick/

এখন সুসংবাদে:

ইভেন্টেরdetail সাথে সম্পর্কিত ক্লিকের সংখ্যা সনাক্ত করতে আপনি ইভেন্টটির সম্পত্তি ব্যবহার করতে পারেন । এটি clickসনাক্ত করতে মোটামুটি সহজ ভিতরে ডাবল ক্লিক করে তোলে ।

একক ক্লিকগুলি সনাক্ত করতে এবং তারা ডাবল ক্লিকের অংশ কিনা তা এখনও সমস্যা থেকে যায়। তার জন্য, আমরা একটি টাইমার এবং ফিরে এসেছি setTimeout

একটি ডেটা অ্যাট্রিবিউট (বিশ্বব্যাপী পরিবর্তনশীল এড়াতে) ব্যবহার করে এবং ক্লিকগুলি নিজেরাই গণনা করার প্রয়োজন ছাড়াই এগুলি একসাথে মোড়ানো, আমরা পাই:

এইচটিএমএল:

<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>

ডেমো:

JSfiddle


অ্যাক্সেসযোগ্যতা এবং ডাবল ক্লিকের গতি সম্পর্কে নোট:

  • উইকিপিডিয়ায় যেমন লেখা আছে "ডাবল ক্লিক হিসাবে ব্যাখ্যা করার জন্য টানা দু'বার ক্লিকের জন্য প্রয়োজনীয় সর্বোচ্চ বিলম্ব মানহীন নয়"।
  • ব্রাউজারে সিস্টেমের ডাবল-ক্লিকের গতি সনাক্ত করার কোনও উপায় নেই।
  • ডিফল্টটি মনে হয় 500 এমএস এবং উইন্ডোজ ( উত্স ) এ 100-900 মিলিমিটারের ব্যাপ্তি রয়েছে
  • প্রতিবন্ধী ব্যক্তিদের কথা চিন্তা করুন যারা তাদের ওএস সেটিংসে ডাবল ক্লিকের গতিটি সবচেয়ে ধীর করে দেন।
    • যদি উপরে আমাদের ডিফল্ট 500 এমএসের চেয়ে সিস্টেম ডাবল ক্লিকের গতি ধীর হয় তবে একক এবং ডাবল-ক্লিক আচরণ দুটিই ট্রিগার হবে।
    • হয় এক এবং একই আইটেমের সম্মিলিত একক এবং ডাবল ক্লিক উপর নির্ভর ব্যবহার করবেন না।
    • অথবা: মান বাড়ানোর ক্ষমতা রাখার জন্য বিকল্পগুলিতে একটি সেটিং যুক্ত করুন।

একটি সন্তোষজনক সমাধান পেতে কিছুটা সময় নিয়েছে, আমি আশা করি এটি সাহায্য করবে!


4

দুর্দান্ত jQuery স্পার্কল প্লাগইন ব্যবহার করুন। প্লাগইন আপনাকে প্রথম এবং শেষ ক্লিক সনাক্ত করার বিকল্প দেয়। অন্য ক্লিকটি প্রথম ক্লিকের পরে অনুসরণ করা হয়েছে কিনা তা সনাক্ত করে আপনি এটি ক্লিক এবং ডিবিএলক্লিকের মধ্যে পার্থক্য করতে ব্যবহার করতে পারেন।

এটি http://balupton.com/sandbox/jquery-sparkle/demo/ এ দেখুন


3

আমি একটি সাধারণ jQuery প্লাগইন লিখেছি যা আপনাকে ডাবল ক্লিক থেকে একক ক্লিককে আলাদা করতে একটি কাস্টম 'সিঙ্গেলিক্লিক' ইভেন্ট ব্যবহার করতে দেয়:

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

আধুনিক সঠিক উত্তরটি গৃহীত উত্তর এবং @ কী এর সমাধানের মধ্যে একটি মিশ্রণ। আপনার প্রথম একক ক্লিক এবং event.detailদ্বিতীয় ক্লিকটি প্রতিরোধ করার জন্য চেক রোধ করতে একটি সময়সীমা দরকার ।

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

আমি jquery (এবং অন্যান্য 90-140k libs) এড়াতে পছন্দ করি এবং নোটকৃত ব্রাউজারগুলি প্রথমে অনক্লিকাকে পরিচালনা করে, তাই আমি তৈরি একটি ওয়েবসাইটটিতে আমি এখানে যা করেছি (উদাহরণস্বরূপ, ক্লিক করা লোকেশন স্থানীয় 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 ...
}

আশা করি এইটি কাজ করবে


2
আপনার গেমের URL টির জন্য আপনার উত্তরটি মোটেও বোঝার দরকার নেই। আমি এটিকে সরিয়ে দিচ্ছি যাতে এই পোস্টটিকে স্প্যাম করার চেষ্টা হিসাবে দেখা যায় না।
অ্যান্ড্রু বারবার

1
একমাত্র বিয়োগ, 200 ম্যাজিক ধ্রুবক এবং ওএসের ব্যবহারকারীর মাউস সেটিংস থেকে
মারাত্মকভাবে

1

উপর ভিত্তি করে Adrien শুলার (তাই আপনাকে অনেক ধন্যবাদ !!!) উত্তর, জন্য Datatables.net এবং অনেক ব্যবহারের জন্য, এখানে একটি পরিবর্তন হল:

ক্রিয়া

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

ব্যবহার

$("#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

এটি আমার জন্য কাজ করেছে -

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

usage-

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

0

প্রয়োজন সহজ এবং এইচটিএমএল হবার ক্ষেত্রে কেবল দেশীয় এইচটিএমএল উত্তর পোস্ট করা।

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

অবশ্যই এই নেটিভ Jquery বিকল্প আছে। যেমন ... $('#id').attr('ondblclick',function(){...})বা যেমন আগে বলা হয়েছে,$('#id').dblclick(function(){...});


0

আমি জানি এটি পুরানো, তবে নীচে একটি সিএস বনাম ডাবল ক্লিক নির্ধারণের জন্য একক টাইমার সহ বেসিক লুপের কাউন্টারটির কেবলমাত্র জেএস উদাহরণ। আশা করি এটি কাউকে সাহায্য করবে।

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.