<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: coordinate code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 08 Sep 2008 05:42:41 GMT</pubDate>
    <description>DZone Snippets: coordinate code</description>
    <item>
      <title>Javascript QuickSelect (Coordinated Textbox And ListBox)</title>
      <link>http://snippets.dzone.com/posts/show/2629</link>
      <description>In HTML, say you have a select element with all the states.&lt;br /&gt;Unfortunately typing in this select box only works with the first letter.&lt;br /&gt;So if you type P then A you don't select pennsylvania.&lt;br /&gt;What I commonly do in this situation is to have what I call a quickselect textbox on the page as well.&lt;br /&gt;This is a textbox and listbox that are coordinated.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// in your onload event handler you need this&lt;br /&gt;&lt;br /&gt;// hookup event handlers and control references&lt;br /&gt;var objElement = document.getElementById('cboState');&lt;br /&gt;if ( objElement )&lt;br /&gt;   {&lt;br /&gt;   objElement.onchange = QuickSelect_Change;&lt;br /&gt;   objElement.textbox = document.getElementById('txtState');&lt;br /&gt;   if ( objElement.textbox )&lt;br /&gt;      {&lt;br /&gt;      objElement.textbox.onchange = QuickSelect_TextChange;&lt;br /&gt;      objElement.textbox.onblur = QuickSelect_TextChange;&lt;br /&gt;      objElement.textbox.onkeypress = QuickSelect_KeyPress;&lt;br /&gt;      objElement.textbox.listbox = objElement;&lt;br /&gt;      }&lt;br /&gt;   }       &lt;br /&gt;&lt;br /&gt;// and now the functions&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// QuickSelect_KeyPress&lt;br /&gt;//&lt;br /&gt;// Description : event handler for quick select textbox's key press event&lt;br /&gt;//    selects the appropriate item in the associated listbox control&lt;br /&gt;//&lt;br /&gt;// Arguments : none&lt;br /&gt;//&lt;br /&gt;// Dependencies : &lt;br /&gt;//&lt;br /&gt;// History :&lt;br /&gt;// 2006.09.20 - WSR : created&lt;br /&gt;//&lt;br /&gt;function QuickSelect_KeyPress( e )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   var strCompare = '';&lt;br /&gt;   var numEntryLen;&lt;br /&gt;   var strEntry;&lt;br /&gt;   var objSelect = this.listbox;&lt;br /&gt;   var numOptions = objSelect.options.length;&lt;br /&gt;&lt;br /&gt;   var numCharCode;&lt;br /&gt;   var elTarget;&lt;br /&gt;&lt;br /&gt;   // get event if not passed&lt;br /&gt;   if (!e) var e = window.event;&lt;br /&gt;&lt;br /&gt;   // get character code of key pressed&lt;br /&gt;   if (e.keyCode) numCharCode = e.keyCode;&lt;br /&gt;   else if (e.which) numCharCode = e.which;&lt;br /&gt;&lt;br /&gt;   // get target&lt;br /&gt;   if (e.target) elTarget = e.target;&lt;br /&gt;   else if (e.srcElement) elTarget = e.srcElement;&lt;br /&gt;                                              &lt;br /&gt;   // if form input field &amp; it is a printable character&lt;br /&gt;   if ( elTarget.nodeName.toUpperCase() == 'INPUT' &amp;&amp; numCharCode &gt;= 32 &amp;&amp; numCharCode &lt;= 126 )&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      strEntry = this.value + String.fromCharCode(numCharCode);&lt;br /&gt;      numEntryLen = strEntry.length;&lt;br /&gt;&lt;br /&gt;      // cycle through options&lt;br /&gt;      for (var i = 0; i &lt; numOptions; i++)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // get compare string from value same length as entered string&lt;br /&gt;         strCompare = objSelect.options[i].value.substring(0, numEntryLen);&lt;br /&gt;&lt;br /&gt;         // if value matches what is entered&lt;br /&gt;         if (strEntry == strCompare)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;            // select this option&lt;br /&gt;            objSelect.options[i].selected = true;&lt;br /&gt;&lt;br /&gt;            // end loop&lt;br /&gt;            break;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      // I usually add an error class when input is required and not filled in&lt;br /&gt;      // this removes the class so the input is no longer marked as invalid&lt;br /&gt;      // commented out as it isn't necessary for general purpose&lt;br /&gt;      // RemoveClassName( this, 'error' );&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// QuickSelect_KeyPress&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// QuickSelect_TextChange&lt;br /&gt;//&lt;br /&gt;// Description : event handler for quick select textbox's change &amp; onblur events&lt;br /&gt;//    makes sure item in textbox is a value from list&lt;br /&gt;//&lt;br /&gt;// Arguments : none&lt;br /&gt;//&lt;br /&gt;// Dependencies : none&lt;br /&gt;//&lt;br /&gt;// History :&lt;br /&gt;// 2006.08.09 - WSR : created&lt;br /&gt;//&lt;br /&gt;function QuickSelect_TextChange()&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   var strCompare = '';&lt;br /&gt;   var numEntryLen = this.value.length;&lt;br /&gt;   var strEntry = this.value;&lt;br /&gt;   var objSelect = this.listbox;&lt;br /&gt;   var numOptions = objSelect.options.length;&lt;br /&gt;&lt;br /&gt;   // cycle through options&lt;br /&gt;   for (var i = 0; i &lt; numOptions; i++)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // get compare string from value same length as entered string&lt;br /&gt;      strCompare = objSelect.options[i].value.substring(0, numEntryLen);&lt;br /&gt;&lt;br /&gt;      // if value matches what is entered&lt;br /&gt;      if (strEntry == strCompare)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // select this option&lt;br /&gt;         objSelect.options[i].selected = true;&lt;br /&gt;&lt;br /&gt;         // end loop&lt;br /&gt;         break;&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   // copy code to textbox&lt;br /&gt;   this.value = this.listbox.options[this.listbox.selectedIndex].value;&lt;br /&gt;&lt;br /&gt;   // I usually add an error class when input is required and not filled in&lt;br /&gt;   // this removes the class so the input is no longer marked as invalid&lt;br /&gt;   // commented out as it isn't necessary for general purpose&lt;br /&gt;   // RemoveClassName( this, 'error' );&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// QuickSelect_TextChange&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// QuickSelect_Change&lt;br /&gt;//&lt;br /&gt;// Description : event handler for quick select list box's change event&lt;br /&gt;//    updates the textbox with the selected value&lt;br /&gt;//&lt;br /&gt;// Arguments: none&lt;br /&gt;//&lt;br /&gt;// Dependencies :&lt;br /&gt;//&lt;br /&gt;// History :&lt;br /&gt;// 2006.08.09 - WSR : created&lt;br /&gt;//&lt;br /&gt;function QuickSelect_Change()&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // copy code to textbox&lt;br /&gt;   this.textbox.value = this.options[this.selectedIndex].value;&lt;br /&gt;&lt;br /&gt;   }	&lt;br /&gt;//&lt;br /&gt;// QuickSelect_Change&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;  &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Wed, 20 Sep 2006 21:31:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2629</guid>
      <author>Will_Rickards (Will Rickards)</author>
    </item>
  </channel>
</rss>
