2012-07-31 33 views
26

Tôi muốn có danh sách thả xuống/< Chọn> Hành vi thẻ HTML với tính năng Tự động hoàn tất bằng cách sử dụng Twitter Bootstrap TypeAhead. Các liên kết here đạt được các tính năng của Combo Box, nơi người dùng có thể cung cấp đầu vào của riêng mình cũng có. Tôi muốn hạn chế Người dùng chỉ chọn từ tùy chọn được cung cấp. Có cách nào để tweek Twitter Bootstrap TypeAhead Plugin để mô phỏng hành vi của DropDown List/Tag với tính năng tự động hoàn thành.Twitter Bootstrap TypeĐầu tiên hoạt động như Danh sách thả xuống/Chọn thẻ có tính năng tự động hoàn thành

Tôi đã gọi những câu dưới đây trước khi đăng

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

Bạn đã nhìn [Chosen] (http://harvesthq.github.com/chosen/)? Không phải Twitter Bootstrap nhưng có thể là một giải pháp thay thế? – Sherbrow

+0

@Sherbrow +1. Nhưng tôi đang sử dụng [HandsOnTable] (http://warpech.github.com/jquery-handsontable) sử dụng TB Typeahead vì vậy tôi phải tìm giải pháp bằng cách sử dụng TypeAhead Only –

Trả lời

5

Đó là thực sự tốt - thậm chí rất đơn giản - mà không thay đổi javascript typeahead/sử dụng mã thay đổi, NẾU bạn sẵn sàng không hiển thị kết quả phù hợp được đánh dấu.

HTML:

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

kịch bả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(''); 
    }); 
}); 

đang làm việc/example tại jsfiddle http://jsfiddle.net/davidkonrad/ZJMBE/3/

8

cải thiện Tiny để davidkonrads trả lời để giữ chức năng lọc khi gõ.

$(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

nếu bạn kiểm tra 'if ($ input.data ('typeahead) ') .shown == true) {// hide} else {// show} 'bạn có thể chuyển showAll thành nút chuyển đổi. – gawpertron

+1

Được rồi, thậm chí nhiều hơn một sự cải tiến trên mã này, để bảo vệ làm nổi bật và trường hợp tìm kiếm không nhạy cảm: http://jsfiddle.net/kappamax/XKnfX/ Tôi hy vọng rằng sẽ giúp người khác. – KappaMax

22

Tôi chỉ tìm thấy plugin này tuyệt vời có thể biến một yếu tố CHỌN tiêu chuẩn vào rất liền mạch combo box độc đáo theo kiểu sử dụng typeahead bootstrap. Nó trông rất tuyệt, tôi sẽ sử dụng nó trong dự án tiếp theo của tôi.

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

Live Example (Bootstrap 3)

+0

đẹp! rất cần thiết :) – DdD

+0

bạn đã lưu ngày của tôi thưa ông! :) –

+0

Bất cứ ai sử dụng điều này với mẫu ASP.NET Web Forms mặc định (VS2013), có một quy tắc trong 'Site.css' đặt' max-width: 280px; 'cho' input' elements, có thể comboboxes của bạn trông xấu xí nếu chúng lớn hơn 280 pixel. – dotNET

Các vấn đề liên quan