title: jQuery autocomplete - IE8 issue - this tab has been recovered
body: <p>I run into a problem with jQuery UI - Autocomplete and IE8.</p>
  
  <p>I'm using <code>combobox</code> method which you can find on jQuery UI website - <strong><a href="http://jqueryui.com/demos/autocomplete/#combobox" rel="noreferrer">here</a></strong>
  <br />
  Basically, it is creating autocomplete input + select menu from <code>select/option</code> list.</p>
  
  <p>I'm using jQuery 1.6.4 and jQuery UI 1.8.16; both from google server.</p>
  
  <p>It is working perfectly on Chrome / FF / Opera, but does not work on IE8.</p>
  
  <p>On IE8 - once you select something (after typing), or use dropdown button IE will reload the page. <strong>Please not that IE will not crash till you use arrows or try to select something.</strong></p>
  
  <ul>
  <li><code>res://ieframe.dll/acr_error.htm#,</code> in the URL, in front of the actual path</li>
  <li>or a message <code>this tab has been reloaded; a problem with the page causes IE to close and reopen the page</code></li>
  </ul>
  
  <p><strong><a href="http://dl.dropbox.com/u/17683975/AutoCompleteIE/index.html" rel="noreferrer">Live example here</a></strong></p>
  
  <p><strong>Any idea what is causing IE to act like that? Any suggestion much appreciated.</strong></p>
  
  <hr />
  
  <p>jQuery code:</p>
  
  <pre><code>    &lt;script&gt;
      (function( $ ) {
          $.widget( "ui.combobox", {
              _create: function() {
                  var self = this,
                      select = this.element.hide(),
                      selected = select.children( ":selected" ),
                      value = selected.val() ? selected.text() : "";
                  var input = this.input = $( "&lt;input&gt;" )
                      .insertAfter( select )
                      .val( value )
                      .autocomplete({
                          delay: 0,
                          minLength: 0,
                          source: function( request, response ) {
                              var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
                              response( select.children( "option" ).map(function() {
                                  var text = $( this ).text();
                                  if ( this.value &amp;&amp; ( !request.term || matcher.test(text) ) )
                                      return {
                                          label: text.replace(
                                              new RegExp(
                                                  "(?![^&amp;;]+;)(?!&lt;[^&lt;&gt;]*)(" +
                                                  $.ui.autocomplete.escapeRegex(request.term) +
                                                  ")(?![^&lt;&gt;]*&gt;)(?![^&amp;;]+;)", "gi"
                                              ), "&lt;strong&gt;$1&lt;/strong&gt;" ),
                                          value: text,
                                          option: this
                                      };
                              }) );
                          },
                          select: function( event, ui ) {
                              ui.item.option.selected = true;
                              self._trigger( "selected", event, {
                                  item: ui.item.option
                              });
                          },
                          change: function( event, ui ) {
                              if ( !ui.item ) {
                                  var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
                                      valid = false;
                                  select.children( "option" ).each(function() {
                                      if ( $( this ).text().match( matcher ) ) {
                                          this.selected = valid = true;
                                          return false;
                                      }
                                  });
                                  if ( !valid ) {
                                      // remove invalid value, as it didn't match anything
                                      $( this ).val( "" );
                                      select.val( "" );
                                      input.data( "autocomplete" ).term = "";
                                      return false;
                                  }
                              }
                          }
                      })
                      .addClass( "ui-widget ui-widget-content ui-corner-left" );
  
                  input.data( "autocomplete" )._renderItem = function( ul, item ) {
                      return $( "&lt;li&gt;&lt;/li&gt;" )
                          .data( "item.autocomplete", item )
                          .append( "&lt;a&gt;" + item.label + "&lt;/a&gt;" )
                          .appendTo( ul );
                  };
  
                  this.button = $( "&lt;button type='button'&gt;&amp;nbsp;&lt;/button&gt;" )
                      .attr( "tabIndex", -1 )
                      .attr( "title", "Show All Items" )
                      .insertAfter( input )
                      .button({
                          text: false
                      })
                      .removeClass( "ui-corner-all" )
                      .click(function() {
                          // close if already visible
                          if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
                              input.autocomplete( "close" );
                              return;
                          }
  
                          // work around a bug (likely same cause as #5265)
                          $( this ).blur();
  
                          // pass empty string as value to search for, displaying all results
                          input.autocomplete( "search", "" );
                          input.focus();
                      });
              },
  
              destroy: function() {
                  this.input.remove();
                  this.button.remove();
                  this.element.show();
                  $.Widget.prototype.destroy.call( this );
              }
          });
      })( jQuery );
  
      $(document).ready( function() {
  
          $("#combobox").combobox();
  
      });
  
  
      &lt;/script&gt;
  </code></pre>