MDL-26502 check browser - fix for Symbian (backported)
[moodle.git] / lib / dropdown.js
blobb53efef03cdca50f81d2948ec47ef9d679a18941
1 /****
2 Author: Jerome Mouneyrac
3 Bug Reference: http://tracker.moodle.org/browse/MDL-14439
4 IE and Opera fire the onchange when ever you move into a dropdwown list with the keyboard.
5 These functions fix this problem.
6 ****/
8 /*
9 global variables
11 Note:
12 if I didn't use global variables, we would need to pass them as parameter:  
13 => in initSelect(): 
14    I would write "theSelect.onchange = selectChanged(...);"
15    This code causes a javascript error on IE. (not firefox)
16 so I had to write theSelect.onchange = selectChanged; It's why I use global variables .
17 Because I use global variables, I didn't put this code in javascript-static.js.
18 This file is loaded in javascript.php.
19 */ 
20 var select_formid;
21 var select_targetwindow;
23 //we redefine all user actions on the dropdown list
24 //onfocus, onchange, onkeydown, and onclick
25 function initSelect(formId,targetWindow)
27     //initialise global variables
28     select_formid=formId;
29     select_targetwindow=targetWindow;
31     var theSelect = document.getElementById(select_formid+"_jump");
33     theSelect.changed = false;
35     theSelect.initValue = theSelect.value;
37     theSelect.onchange = selectChanged;
38     theSelect.onkeydown = selectKeyed;
39     theSelect.onclick = selectClicked;
40     
41     return true;
44 function selectChanged(theElement)
46     var theSelect;
47     
48     if (theElement && theElement.value)
49     {
50         theSelect = theElement;
51     }
52     else
53     {
54         theSelect = this;
55     }
56     
57     if (!theSelect.changed)
58     {
59         return false;
60     }
62     //here is the onchange redirection
63     select_targetwindow.location=document.getElementById(select_formid).jump.options[document.getElementById(select_formid).jump.selectedIndex].value;                                
64     
65     return true;
68 function selectClicked()
70     this.changed = true;
73 //we keep Firefox behaviors: onchange is fired when we press "Enter", "Esc", or "Tab"" keys.
74 //note that is probably not working on Mac (keyCode could be different)
75 function selectKeyed(e)
77     var theEvent;
78     var keyCodeTab = "9";
79     var keyCodeEnter = "13";
80     var keyCodeEsc = "27";
81     
82     if (e)
83     {
84         theEvent = e;
85     }
86     else
87     {
88         theEvent = event;
89     }
90     
91     if ((theEvent.keyCode == keyCodeEnter || theEvent.keyCode == keyCodeTab) && this.value != this.initValue)
92     {
93         this.changed = true;
94         selectChanged(this);
95     }
96     else if (theEvent.keyCode == keyCodeEsc)
97     {
98         this.value = this.initValue;
99     }
100     else
101     {
102         this.changed = false;
103     }
104     
105     return true;