यदि आपको 2 अलर्ट मिल रहे हैं, तो ऐसा लगता है कि डबल क्लिक को हटाने के लिए आपका थ्रेसहोल्ड बहुत छोटा है। 150 से 300ms तक बढ़ने का प्रयास करें।
इसके अलावा - मुझे यकीन नहीं है कि आपको ऑर्डर की गारंटी है जिसमें क्लिक और डीब्लक्लिक निकाल दिए जाते हैं। इसलिए, जब आपका dblclick निकाल दिया जाता है, तो यह पहले ईवेंट पर क्लिक करता है, लेकिन यदि यह दूसरे 'क्लिक' ईवेंट से पहले आग लग जाता है, तो यह दूसरा ईवेंट अभी भी अपने आप पर आग लग जाएगा, और आप दोनों को दोहराएंगे घटना फायरिंग और एक क्लिक घटना फायरिंग पर क्लिक करें।
1) वास्तव में डबल क्लिक करें घटना फायरिंग के लिए एक और समाप्ति सेट:
मैं इस संभावित समस्या के लिए दो संभव समाधान देखते हैं। अपने कोड में चिह्नित करें कि डबल क्लिक इवेंट आग लग रहा है। तब, जब 2 'सिंगल क्लिक' घटना की आग, यह इस राज्य पर जांच कर सकते हैं, और कहते हैं कि "उफ़, DBL क्लिक लंबित है, इसलिए मैं कुछ नहीं करूँगा"
2) दूसरा विकल्प आपके लक्षित कार्यों स्वैप करने के लिए है क्लिक घटनाओं के आधार पर बाहर। यह कुछ इस तरह दिख सकता है:
window.onload = function() {
var timer;
var el = document.getElementById('testButton');
var firing = false;
var singleClick = function(){
alert('Single');
};
var doubleClick = function(){
alert('Double');
};
var firingFunc = singleClick;
el.onclick = function() {
// Detect the 2nd single click event, so we can stop it
if(firing)
return;
firing = true;
timer = setTimeout(function() {
firingFunc();
// Always revert back to singleClick firing function
firingFunc = singleClick;
firing = false;
}, 150);
}
el.ondblclick = function() {
firingFunc = doubleClick;
// Now, when the original timeout of your single click finishes,
// firingFunc will be pointing to your doubleClick handler
}
}
असल में यहाँ क्या हो रहा है यदि आप मूल टाइमआउट आप सेट आगे बढ़ें है। यह हमेशा फायरिंग फनक(); एकमात्र चीज जो बदलती है वह है कि फायरिंग फनक() वास्तव में इंगित कर रहा है। एक बार डबल क्लिक का पता चला है, यह इसे डबलक्लिक पर सेट करता है। और फिर हम टाइमआउट की समयसीमा समाप्त होने के बाद हमेशा एकल क्लिक पर वापस आ जाते हैं।
हम भी तो हम 2 सिंगल क्लिक घटना रोकना पता है कि एक "फायरिंग" चर है।
एक अन्य विकल्प dblclick घटनाओं पूरी तरह से अनदेखी करने के लिए, और सिर्फ एक क्लिक और टाइमर के साथ यह पता लगा है:
window.onload = function() {
var timer;
var el = document.getElementById('testButton');
var firing = false;
var singleClick = function(){
alert('Single');
};
var doubleClick = function(){
alert('Double');
};
var firingFunc = singleClick;
el.onclick = function() {
// Detect the 2nd single click event, so we can set it to doubleClick
if(firing){
firingFunc = doubleClick;
return;
}
firing = true;
timer = setTimeout(function() {
firingFunc();
// Always revert back to singleClick firing function
firingFunc = singleClick;
firing = false;
}, 150);
}
}
यह अपरीक्षित :) है
जब आप अपने एक क्लिक के अलर्ट प्राप्त करें, यह हमेशा दुक्की में है, या आप कभी कभी केवल एक चेतावनी मिलता है? – Matt
कभी-कभी मुझे केवल एक मिलता है। –