एक और एक ही तत्व पर सिंगल क्लिक और डबल क्लिक के बीच अंतर कैसे करें?
यदि आपको उन्हें मिश्रण करने की आवश्यकता नहीं है, तो आप पर click
और पर भरोसा कर सकते हैंdblclick
और प्रत्येक ठीक काम करेगा।
उन्हें मिलाने की कोशिश करते समय एक समस्या उत्पन्न होती है: एक dblclick
घटना वास्तव में एक click
घटना को भी ट्रिगर करेगी , इसलिए आपको यह निर्धारित करने की आवश्यकता है कि क्या एक सिंगल क्लिक "स्टैंड-अलोन" सिंगल क्लिक है, या एक डबल क्लिक का हिस्सा है।
इसके अलावा: आप दोनों का उपयोग नहीं करना चाहिए click
और dblclick
एक और एक ही तत्व पर :
एक ही तत्व के लिए क्लिक और डब्क्लिक घटनाओं दोनों के लिए हैंडलर को बांधना अनुचित है। ट्रिगर की गई घटनाओं का क्रम ब्राउज़र से ब्राउज़र तक भिन्न होता है, कुछ के साथ दो क्लिक करने से पहले की घटनाएँ प्राप्त होती हैं और अन्य केवल एक। डबल-क्लिक संवेदनशीलता (डबल क्लिक के रूप में पहचाने जाने वाले क्लिकों के बीच अधिकतम समय) ऑपरेटिंग सिस्टम और ब्राउज़र द्वारा भिन्न हो सकती है, और अक्सर उपयोगकर्ता-कॉन्फ़िगर योग्य है।
स्रोत: https://api.jquery.com/dblclick/
अब अच्छी खबर पर:
आप ईवेंटdetail
से संबंधित क्लिक की संख्या का पता लगाने के लिए ईवेंट की संपत्ति का उपयोग कर सकते हैं । यह अंदर डबल क्लिक करता हैclick
पता लगाने के लिए काफी आसान के ।
समस्या एकल क्लिकों का पता लगाने की बनी हुई है और वे डबल क्लिक का हिस्सा हैं या नहीं। उसके लिए, हम एक टाइमर का उपयोग कर वापस आ रहे हैं औरsetTimeout
।
डेटा विशेषता के उपयोग (वैश्विक वैरिएबल से बचने के लिए) और स्वयं क्लिकों को गिनने की आवश्यकता के बिना, सभी को एक साथ लपेटकर, हम निम्नलिखित हैं:
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>
जावास्क्रिप्ट:
<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-900mms की रेंज ( स्रोत )
- विकलांग लोगों के बारे में सोचें, जो अपने ओएस सेटिंग्स में, अपनी सबसे धीमी गति पर डबल क्लिक करते हैं।
- यदि सिस्टम डबल क्लिक की गति हमारे डिफ़ॉल्ट 500 एमएस से अधिक धीमी है, तो एकल और डबल-क्लिक व्यवहार दोनों को ट्रिगर किया जाएगा।
- या तो संयुक्त एकल पर भरोसा न करें और एक और एक ही आइटम पर डबल क्लिक करें।
- या: मूल्य बढ़ाने की क्षमता रखने के लिए विकल्पों में एक सेटिंग जोड़ें।
एक संतोषजनक समाधान खोजने में थोड़ा समय लगा, मुझे आशा है कि इससे मदद मिलेगी!