Bonjour,
ne connaissant pas once:true non plus, je me suis intéressé à la discussion 
1- once:true : selon la doc :
once
Un booléen (Boolean) indiquant que listener doit être invoqué au plus une fois après avoir été ajouté.
Si true (vrai),
listener sera automatiquement supprimé après son appel.
Du coup, le bouton ne sera plus cliquable. Autant le désactiver, pour prévenir l'utilisateur avec :
btn.setAttribute('disabled','disabled');
2- Sinon, si on veut qu'il puisse encore être cliquable, on peut utiliser (SANS once:true) :
1 2 3 4 5 6 7
| btn.addEventListener('click', (event) => {
// ...... (action) .......
btn.setAttribute('disabled','disabled'); // désactive
window.setTimeout( () => {
btn.removeAttribute('disabled'); // active
}, 500); // durée à adapter
}); |
3- Par contre, le double-clic n'est plus possible !
4- Je suis tombé sur autre discussion , qui proposait une solution avec event.detail :
1 2 3 4 5 6 7 8 9 10
| "use strict";
document.querySelector('#btn').addEventListener('click', (event) => {
if (event.detail === 1 ) // 1 click
{
console.log('simple click ! '+event.detail);
} else if( event.detail === 2) // 2 click
{
console.log('double click ! '+event.detail);
}
}); |
On peut donc différencier le simple clic du double-clic.
MAIS,... même quand on fait un double-clic (= 2 clic très rapides) :
- le simple clic est activé au 1er clic
- et le double_clic au 2ème....

5- [EDIT] Peut-être une solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| "use strict";
var nbr_clk = 0;
document.querySelector('#btn').addEventListener('click', (event) => {
nbr_clk++;
window.setTimeout( () => {
if (nbr_clk === 1 ) // 1 click
{
console.log('simple click ! '+nbr_clk);
} else if( nbr_clk === 2) // 2 click
{
console.log('double click ! '+nbr_clk);
}
nbr_clk = 0;
}, 500); // durée pour définir le double-clic (à adapter)
}); |
Là, on sépare bien simple et double clic.
L'inconvénient est de devoir utiliser :
- un compteur externe (btn_clk)
- une temporisation "bidon" (quelle durée pour définir le double-clic ?)
Partager