2012-07-31 17 views
26

Quiero tener un DropDown List/< Seleccione> Comportamiento de etiqueta HTML con función Autocompletar utilizando Twitter Bootstrap TypeAhead. El enlace here logra la característica de Combo Box donde el usuario puede proporcionar su propia entrada también. Quiero restringir al usuario para que seleccione solo de la opción provista. ¿Hay alguna forma de utilizar el complemento de Twitter Bootstrap TypeAhead para emular el comportamiento de DropDown List/Tag con la función Autocompletar?Twitter Bootstrap TypeAhead para trabajar como DropDown List/Seleccionar etiqueta con función Autocompletar

me he referido a la pregunta siguiente antes de publicar

  1. Adding a dropdown button to Twitter bootstrap typeahead component
+4

¿Ha mirado [Elegido] (http://harvesthq.github.com/chosen/)? No Twitter Bootstrap, pero tal vez una alternativa? – Sherbrow

+0

@Sherbrow +1. Pero estoy usando [HandsOnTable] (http://warpech.github.com/jquery-handsontable) que usa TB Typeahead, así que tengo que encontrar la solución usando TypeAhead Only –

Respuesta

5

Eso es de hecho posible - incluso muy simple - sin cambiar el javascript typeahead/utilizando el código alterado, SI que está dispuesto no mostrar los resultados coincidentes resaltados.

HTML:

<input name="test" id="test"/> 
<button id="emu-select" class="btn btn-small" type="button"> 
<i class="icon-arrow-down"></i> 
</button> 

guión:

$(document).ready(function() { 

    $("#test").typeahead({ 
     "source": ['Pennsylvania','Connecticut','New York','Maryland','Virginia'], 
     //match any item 
     matcher : function (item) { 
      return true; 
     }, 
     //avoid highlightning of "a" 
     highlighter: function (item) { 
      return "<div>"+item+"</div>" 
     } 
    }); 

    // "select"-button 
    $("#emu-select").click(function(){ 
     //add something to ensure the menu will be shown 
     $("#test").val('a'); 
     $("#test").typeahead('lookup'); 
     $("#test").val(''); 
    }); 
}); 

código de trabajo/ejemplo en jsFiddle http://jsfiddle.net/davidkonrad/ZJMBE/3/

8

mejora Tiny a davidkonrads responder a mantener la funcionalidad del filtro al escribir.

$(document).ready(function() { 

$("#test").typeahead({ 
    "source": ['Pennsylvania', 'Connecticut', 'New York', 'Maryland', 'Virginia'], 
    //match any item 
    matcher: function(item) { 
     if (this.query == '*') { 
      return true; 
     } else { 
      return item.indexOf(this.query) >= 0; 
     } 
    }, 
    //avoid highlightning of "*" 
    highlighter: function(item) { 
     return "<div>" + item + "</div>" 
    } 
}); 

// "select"-button 
$(".showAll").click(function(event) { 
    var $input = $("#test"); 
    //add something to ensure the menu will be shown 
    $input.val('*'); 
    $input.typeahead('lookup'); 
    $input.val(''); 
}); 

}); 

http://jsfiddle.net/d4kris/5rtGA/3/

+0

si marca 'if ($ input.data ('typeahead ') .shown == true) {// hide} else {// show} 'puedes convertir showAll en un botón de alternar. – gawpertron

+1

bien, incluso más de una mejora en este código, para preservar y resaltar caso la búsqueda insensible: http://jsfiddle.net/kappamax/XKnfX/ espero que ayuda a otra persona. – KappaMax

22

Acabo de encontrar este plugin increíble que convierte un elemento SELECT estándar en muy transparente cuadro combinado muy bien labrado usando typeahead de arranque. Se ve muy bien, voy a usarlo en mi próximo proyecto.

https://github.com/danielfarrell/bootstrap-combobox

Live Example (Bootstrap 3)

+0

hermosa! muy necesario :) – DdD

+0

usted salvó mi día señor! :) –

+0

Cualquiera que use esto con la plantilla predeterminada de Formas Web de ASP.NET (VS2013), hay una regla en 'Site.css' que establece' max-width: 280px; 'para elementos' input', que pueden parecer feos a tus cuadros combinados si son más anchos que 280 píxeles. – dotNET

Cuestiones relacionadas