Foros del Web » Creando para Internet » HTML »

[SOLUCIONADO] HTML select con filtro

Estas en el tema de HTML select con filtro en el foro de HTML en Foros del Web. Buenas tardes, Tengo un campo select donde aparecen una cantidad grande de nombres, podría llegar a cientos. Lo que necesito es poder filtrar el campo, ...
  #1 (permalink)  
Antiguo 20/02/2013, 14:15
Avatar de diegoug  
Fecha de Ingreso: mayo-2011
Ubicación: Colombia
Mensajes: 52
Antigüedad: 12 años, 10 meses
Puntos: 1
Información HTML select con filtro

Buenas tardes,

Tengo un campo select donde aparecen una cantidad grande de nombres, podría llegar a cientos.

Lo que necesito es poder filtrar el campo, me explico:

Que si se selecciono uno y se dio la búsqueda, aparezca como los textos de ejemplo para formularios y con la posibilidad de escribir una búsqueda dentro de esta lista

Que a medida que valla escribiendo el texto en la caja se despliegue la lista con las opciones filtradas por el texto.

Un ejemplo seria: que si escribo D o d en la caja de texto, se despliega la lista con las opciones Diego y Daniel; Así para todos, y que si se busca con Diego entonces después de cargar la búsqueda en la caja aparezca como texto de ejemplo Diego, que si seleccionan se desaparece dando lugar a escribir una nueva búsqueda.

Código:
<select id="id_nombre" name="nombre">
                        <option value="3">Diego </option>
                        <option value="4">Daniel  </option>
                        <option value="5">Fernando  </option>
                        <option value="6">Luz </option>
                        <option value="7">Catherine  </option>
                        <option value="8">Samuel  </option>
                        <option value="10">Eduardo  </option>
                </select>
Gracias.
__________________
_________________________
Diego Alonso Uribe Gamez
Twitter: @DiegoUG
  #2 (permalink)  
Antiguo 21/02/2013, 17:05
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: HTML select con filtro

Con HTML no lo podrás hacer, a fuerza hay que usar Javascript. Se puede hacer a mano, aunque quizá si ya usas jQuery puedes probar con esto: http://jqueryui.com/autocomplete/


Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 21/02/2013, 18:01
Avatar de diegoug  
Fecha de Ingreso: mayo-2011
Ubicación: Colombia
Mensajes: 52
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: HTML select con filtro

Cita:
Iniciado por Carlangueitor Ver Mensaje
Con HTML no lo podrás hacer, a fuerza hay que usar Javascript. Se puede hacer a mano, aunque quizá si ya usas jQuery puedes probar con esto: http://jqueryui.com/autocomplete/
Saludos
Me sirve el ejemplo, pero no logro quitarle los mensajes que aparecen:

.attr( "title", value + " didn't match any item" )

y

.attr( "title", "Show All Items" )

Código:
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>jQuery UI Autocomplete - Combobox</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.1/themes/base/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
  <style>
  .ui-combobox {
    position: relative;
    display: inline-block;
  }
  .ui-combobox-toggle {
    position: absolute;
    top: 0;
    bottom: 0;
    margin-left: -1px;
    padding: 0;
    /* support: IE7 */
    *height: 1.7em;
    *top: 0.1em;
  }
  .ui-combobox-input {
    margin: 0;
    padding: 0.3em;
  }
  </style>
  <script>
  (function( $ ) {
    $.widget( "ui.combobox", {
      _create: function() {
        var input,
          that = this,
          wasOpen = false,
          select = this.element.hide(),
          selected = select.children( ":selected" ),
          value = selected.val() ? selected.text() : "",
          wrapper = this.wrapper = $( "<span>" )
                .addClass( "ui-combobox" )
            .insertAfter( select );
 
        function removeIfInvalid( element ) {
          var value = $( element ).val(),
            matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( value ) + "$", "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
            $( element )
              .val( "" )
              .attr( "title", value + " didn't match any item" )
              .tooltip( "open" );
            select.val( "" );
            setTimeout(function() {
              input.tooltip( "close" ).attr( "title", "" );
            }, 2500 );
            input.data( "ui-autocomplete" ).term = "";
          }
        }
 
        input = $( "<input>" )
          .appendTo( wrapper )
          .val( value )
          .attr( "title", "" )
          .addClass( "ui-state-default ui-combobox-input" )
          .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 && ( !request.term || matcher.test(text) ) )
                  return {
                    label: text.replace(
                      new RegExp(
                        "(?![^&;]+;)(?!<[^<>]*)(" +
                        $.ui.autocomplete.escapeRegex(request.term) +
                        ")(?![^<>]*>)(?![^&;]+;)", "gi"
                      ), "<strong>$1</strong>" ),
                    value: text,
                    option: this
                  };
              }) );
            },
            select: function( event, ui ) {
              ui.item.option.selected = true;
              that._trigger( "selected", event, {
                item: ui.item.option
              });
            },
            change: function( event, ui ) {
              if ( !ui.item ) {
                removeIfInvalid( this );
              }
            }
          })
          .addClass( "ui-widget ui-widget-content ui-corner-left" );
 
        input.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
          return $( "<li>" )
            .append( "<a>" + item.label + "</a>" )
            .appendTo( ul );
        };
 
        $( "<a>" )
          .attr( "tabIndex", -1 )
          .attr( "title", "Show All Items" )
          .tooltip()
          .appendTo( wrapper )
          .button({
            icons: {
              primary: "ui-icon-triangle-1-s"
            },
            text: false
          })
          .removeClass( "ui-corner-all" )
          .addClass( "ui-corner-right ui-combobox-toggle" )
          .mousedown(function() {
            wasOpen = input.autocomplete( "widget" ).is( ":visible" );
          })
          .click(function() {
            input.focus();
 
            // close if already visible
            if ( wasOpen ) {
              return;
            }
 
            // pass empty string as value to search for, displaying all results
            input.autocomplete( "search", "" );
          });
 
        input.tooltip({
          tooltipClass: "ui-state-highlight"
        });
      },
 
      _destroy: function() {
        this.wrapper.remove();
        this.element.show();
      }
    });
  })( jQuery );
 
  $(function() {
    $( "#combobox" ).combobox();
  });
  </script>
</head>
<body>
 
<div class="ui-widget">
  <label>Your preferred programming language: </label>
  <select id="combobox">
    <option value="">Select one...</option>
    <option value="ActionScript">ActionScript</option>
    <option value="AppleScript">AppleScript</option>
    <option value="Asp">Asp</option>
    <option value="BASIC">BASIC</option>
    <option value="C">C</option>
    <option value="C++">C++</option>
    <option value="Clojure">Clojure</option>
    <option value="COBOL">COBOL</option>
    <option value="ColdFusion">ColdFusion</option>
    <option value="Erlang">Erlang</option>
    <option value="Fortran">Fortran</option>
    <option value="Groovy">Groovy</option>
    <option value="Haskell">Haskell</option>
    <option value="Java">Java</option>
    <option value="JavaScript">JavaScript</option>
    <option value="Lisp">Lisp</option>
    <option value="Perl">Perl</option>
    <option value="PHP">PHP</option>
    <option value="Python">Python</option>
    <option value="Ruby">Ruby</option>
    <option value="Scala">Scala</option>
    <option value="Scheme">Scheme</option>
  </select>
</div>
</body>
</html>
__________________
_________________________
Diego Alonso Uribe Gamez
Twitter: @DiegoUG

Etiquetas: html5, javascript, javascript+html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:32.