[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/lib/ -> dropdown.js (source)

   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  ****/
   7  
   8  /*
   9  global variables
  10  
  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;
  22  
  23  //we redefine all user actions on the dropdown list
  24  //onfocus, onchange, onkeydown, and onclick
  25  function initSelect(formId,targetWindow)
  26  {
  27      //initialise global variables
  28      select_formid=formId;
  29      select_targetwindow=targetWindow;
  30  
  31      var theSelect = document.getElementById(select_formid+"_jump");
  32  
  33      theSelect.changed = false;
  34  
  35      selectFocussed();
  36  
  37      theSelect.onchange = selectChanged;
  38      theSelect.onkeydown = selectKeyed;
  39      theSelect.onclick = selectClicked;
  40      
  41      return true;
  42  }
  43  
  44  function selectChanged(theElement)
  45  {
  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      }
  61  
  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;
  66  }
  67  
  68  function selectClicked()
  69  {
  70      this.changed = true;
  71  }
  72  
  73  function selectFocussed()
  74  {
  75      this.initValue = this.value;
  76      
  77      return true;
  78  }
  79  
  80  //we keep Firefox behaviors: onchange is fired when we press "Enter", "Esc", or "Tab"" keys.
  81  //note that is probably not working on Mac (keyCode could be different)
  82  function selectKeyed(e)
  83  {
  84      var theEvent;
  85      var keyCodeTab = "9";
  86      var keyCodeEnter = "13";
  87      var keyCodeEsc = "27";
  88      
  89      if (e)
  90      {
  91          theEvent = e;
  92      }
  93      else
  94      {
  95          theEvent = event;
  96      }
  97  
  98      if ((theEvent.keyCode == keyCodeEnter || theEvent.keyCode == keyCodeTab) && this.value != this.initValue)
  99      {
 100          this.changed = true;
 101          selectChanged(this);
 102      }
 103      else if (theEvent.keyCode == keyCodeEsc)
 104      {
 105          this.value = this.initValue;
 106      }
 107      else
 108      {
 109          this.changed = false;
 110      }
 111      
 112      return true;
 113  }


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7