Jeśli otrzymujesz 2 alerty, wydaje się, że Twój próg wykrycia podwójnego kliknięcia jest zbyt mały. Spróbuj zwiększyć 150 do 300ms.
Ponadto - nie jestem pewien, czy masz gwarancję zamówienia, w którym są uruchamiane kliknięcia i dblclick. Tak więc, gdy Twój dblclick zostanie zwolniony, usuwa jedno kliknięcie, ale jeśli wystrzeli przed drugim wydarzeniem "kliknięcia", to drugie wydarzenie będzie nadal strzelać samodzielnie, a skończysz z podwójnym kliknięciem. Wypalanie zdarzeń po kliknięciu i wypalanie zdarzeń jednym kliknięciem.
Widzę dwa możliwe rozwiązania tego potencjalnego problemu:
1) Ustaw limit czasu dla innej rzeczywistości wypalania kliknij dwukrotnie zdarzenie. Zaznacz w swoim kodzie, że zdarzenie o podwójnym kliknięciu wkrótce się uruchomi. Wtedy, gdy 2nd „jednym kliknięciem” Zdarzenie, może sprawdzić na tym stanie, i powiedzieć „ups, dbl kliknij w toku, więc będę robić nic”
2) Druga opcja to zamienić funkcje docelowe obecnie na podstawie zdarzeń kliknięcia. Może to wyglądać mniej więcej tak:
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
}
}
Zasadniczo, to co się tutaj dzieje, pozwala ci ustawić pierwotny ustawiony limit czasu. Zawsze będzie wywoływać metodę firingFunc(); Jedyną rzeczą, która się zmienia, jest to, na co faktycznie wskazuje element wywoływania firingFunc(). Po wykryciu podwójnego kliknięcia ustawia go na doubleClick. A potem zawsze wracamy do singla po przekroczeniu limitu czasu.
Mamy również zmienną "wypalania", więc wiemy, że przechwycimy drugie zdarzenie z pojedynczym kliknięciem.
Inną alternatywą jest ignorowanie dblclick wydarzenia całkowicie i po prostu go wykryć z pojedynczych kliknięć i timer:
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);
}
}
To jest niesprawdzone :)
Po otrzymaniu powiadomienia pojedyncze kliknięcia, jest to zawsze dwójkami, czy też czasami tylko jeden alert? – Matt
Czasami mam tylko jeden. –