Last modified by Julien EYMERY on 2015/07/15 15:07

Show last authors
1 Lorsqu'une balise HTML exploite les événements onclick et ondblclick on constate lors d'un double-clic qu'un événement onclick est déclenché.
2
3 Ce comportement est le comportement natif du système d'exploitation Windows. De plus, l'ordonnancement des événements dépend du navigateur utilisé :
4
5 - Sous IE, on a les événements suivants : onclick puis ondblclick (un seul onclick déclenché avant le double-clic),
6 - Sous Firefox, on a les événements suivants : onclick, onclick puis ondblclick (deux onclick déclenchés avant le double-clic).
7
8 Sous Windows, l'intervalle de temps entre 2 clics permettant de savoir s'il y a double-clic est de 500 ms. Cette valeur est configurable par l'utilisateur (via le Panneau de configuration) et stockée dans la base de registres.
9
10 Comment empêcher le déclenchement du (des) onclick avant le ondblclick ?
11
12 Une première solution :
13
14
15
16 {{code language="js" language="js"}}
17 <script>
18 <!--
19 // File d'attente des evts onclick
20 var fileEvtClic = new Array();
21 function execClic ()
22 {
23 // Extraire l'evt clic de la file d'attente et
24 // executer le code JS associé
25 var obj = fileEvtClic.shift();
26 window.eval(obj.tr.getAttribute('onfacticeclic'));
27 }
28 function fctClic (objTr)
29 {
30 var obj = {};
31 // Ajouter l'evt dans la file d'attente et deferrer son traitement de 300 ms
32 obj.tr = objTr;
33 obj.idTimeOut = setTimeout("execClic()", 300);
34 fileEvtClic.push(obj);
35 }
36 function cancelClic(objTR)
37 {
38 // Un evt double-clic est declenché :
39 // supprimer des evts de clic sur la meme ligne (meme balise TR)
40 // de la file d'attente
41 var i = 0, obj;
42 while (i < fileEvtClic.length)
43 {
44 obj = fileEvtClic[i];
45 if (obj.tr == objTR)
46 {
47 clearTimeout(obj.idTimeOut);
48 fileEvtClic.splice(i, 1);
49 }
50 else
51 i++;
52 }
53 }
54 -->
55 </script>
56 {{/code}}
57
58
59
60 Sur une balise TR d'une TABLE LISTE par exemple :
61
62 <tr onclick~="fctClic(this)" onfacticeclic~="::ADELIA_EVT(TR_TABLE,:AJAX,:ASYNC,:COMP~=1)" ondblclick~="cancelClic(this);::ADELIA_EVT(TR_TABLE,:AJAX,:ASYNC,:COMP~=1)">
63
64 Inconvénient de la solution : Elle suppose de connaître l'intervalle de temps entre 2 clics : Cette valeur est une valeur du système d'exploitation et peut varier en fonction de celui-ci (Windows, Mac OS, Linux, etc.). De plus, cette valeur est configurable par l'utilisateur.
65
66
67 Autre solution : Ne pas s' appuyer sur l'événement ondblclick et le simuler : Sur le onclick, déclencher un timer d'une valeur determinée (500 ms par exemple).
68 Pour Firefox : si un autre onclick est déclenché pendant ce laps de temps alors déclencher le pseudo double-clic.
69 Pour IE : si un onmousedown et onmouseup sont déclenchés pendant ce laps de temps alors déclencher le pseudo double-clic.
70
71 Avantage de la solution : Fonctionne sur tous les systèmes d'exploitation.
72 Inconvénient : Dépend du nombre de onclick déclenchés avant le double-clic (donc dépendant du navigateur).
73
74 (((
75 == (% style="line-height: 1.5;" %)Articles connexes(%%) ==
76 )))
77
78 Les articles connexes apparaissent ici en fonction des étiquettes que vous avez sélectionnées. Cliquez pour modifier la macro et ajouter ou modifier des étiquettes.
79
80 {{liveData sort="doc.date:desc" source="liveTable" properties="doc.title,doc.date,doc.author" description="Recently updated" limit="5" filters="tag=web événement" sourceParameters="translationPrefix=platform.index."}}{{/liveData}}
81