twitter bootstrap การเติมข้อความอัตโนมัติแบบเลื่อนลง / combobox ด้วย Knockoutjs


114

ฉันมีข้อกำหนดที่ฉันต้องใช้ดรอปดาวน์การเติมข้อความอัตโนมัติสำหรับบูตสแตรป แต่ผู้ใช้สามารถมีข้อความในรูปแบบอิสระในเมนูแบบเลื่อนลงนั้นได้หากต้องการ ก่อนที่คุณจะคิดถึง TypeAhead ฉันสามารถใช้กล่องข้อความ Bootstrap TypeAhead ได้ แต่ฉันจำเป็นต้องมีดรอปดาวน์เนื่องจากเราต้องการให้ค่าเริ่มต้นบางค่าเป็นตัวเลือกการเริ่มต้นในกรณีที่ผู้ใช้ไม่รู้ว่าจะค้นหาอะไร

ฉันใช้สิ่งนี้กับ MVC DropDownListFor เนื่องจากสร้างตัวควบคุมการเลือกสำหรับเรา

ฉันพบบทความนี้ซึ่งเหมาะกับฉัน

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

สิ่งที่ฉันต้องทำคือถอดชื่อออกจากตัวควบคุมการเลือกและตัวควบคุมก็ให้ฉันป้อนข้อความในรูปแบบอิสระ ดีทั้งหมดจนถึงตอนนี้

ตอนนี้ฉันใช้สิ่งนี้ร่วมกับ Knockoutjs ฉันผูกตัวเลือกและค่าที่เลือกกับตัวควบคุมการเลือกจากนั้นในแถวที่แสดงเทมเพลตของฉันฉันเรียกว่า (ตัวเลือก). combobox () ซึ่งทำให้ตัวเลือกควบคุม comobobox bootstrap และเพิ่มตัวควบคุมอินพุตและซ่อนตัวควบคุมการเลือกในฉาก หลัง

ปัญหาตอนนี้คือเมื่อฉันพยายามดึงค่าเขาไปโพสต์ไปยังเซิร์ฟเวอร์เนื่องจากค่าที่ฉันใส่ในช่องป้อนข้อมูลไม่ใช่ตัวเลือกที่ถูกต้องจากตัวเลือกที่ฉันให้เพื่อเลือกการควบคุมจึงมักตั้งค่าเป็นตัวเลือกแรกตามค่าเริ่มต้น นี่เป็นเพราะฉันตั้งค่าการเชื่อมโยงของค่าที่เลือกบนตัวควบคุมที่เลือกไม่ใช่ในกล่องอินพุตที่สร้างโดย bootstrap-combobox.js

คำถามของฉันคือฉันจะทำให้กล่องอินพุตเชื่อมโยงข้อมูลกับ porperty เดียวกันกับที่ตัวควบคุมเลือกถูกผูกไว้ได้อย่างไร

ตัวเลือกอื่น ๆ ?? โปรดแจ้งให้เราทราบหากคุณต้องการคำชี้แจงเพิ่มเติมหรือมีคำถาม ช่วยแนะนำหน่อยครับ.

ขอบคุณ


ฉันพบทางออกสำหรับสถานการณ์ของฉัน ฉันใช้กล่องข้อความ TypeAhead แทนการเติมข้อความอัตโนมัติและแสดงตัวเลือกแบบเลื่อนลงโดยค่าเริ่มต้นเมื่อผู้ใช้มุ่งเน้นไปที่ปุ่มควบคุมหรือกดปุ่มลง ด้วยวิธีนี้พวกเขารู้ว่าสิ่งที่พวกเขาสามารถมองหาได้ซึ่งเป็นความต้องการหลักของฉัน
กฤษณะเตชะวีระมัชฌิมา

คำตอบ:


254

มีลักษณะที่Select2 สำหรับเงินทุน มันควรจะทำได้ทุกอย่างที่คุณต้องการ

ตัวเลือกที่ดีอีกประการหนึ่งคือSelectize.js รู้สึกเหมือนเป็นของ Bootstrap มากขึ้น


27
คุณใช้ Select2 เพื่ออนุญาตการป้อนข้อความที่ยังไม่รวมอยู่ในแหล่งข้อมูลได้อย่างไร
compcentral

4
ดังที่ @compcentral กล่าวไว้อย่างถูกต้อง Select2 ไม่อนุญาตให้คุณป้อนสิ่งที่ไม่อยู่ในรายการตัวเลือก การใช้คุณสมบัติการติดแท็ก (อัตโนมัติ) เพื่อจำลองสิ่งนี้เป็นเรื่องยุ่งยากเนื่องจากไม่ยอมรับข้อความที่มีช่องว่างภายใน
Stas Slabko

2
ช่างเป็นอะไรที่ดี! ฉันลงเอยด้วยการใช้ Selectize เนื่องจากดูเหมือน Bootstrap-esque มากกว่า
Steven

1
เนื่องจากปัญหาที่ระบุโดย @compcentral และ Stas ฉันจึงเลือกใช้ selectize.js
Neil Monroe

1
@compcentral ทำไมคุณไม่ใช้วิธีแหล่งข้อมูลระยะไกล
Clain Dsilva

23

ดาตาลิสต์ HTML5 พื้นฐานใช้งานได้หรือไม่ มันสะอาดและคุณไม่ต้องเล่นกับรหัสของบุคคลที่สามที่วุ่นวายW3SCHOOL กวดวิชา

เอกสาร MDNคือพูดเก่งมากและมีตัวอย่าง


3
ปัญหาสำคัญของ HTML 5 datalistคือไม่รองรับเหตุการณ์ DOM ใด ๆ ดังนั้นทุกครั้งที่คุณเลือกค่าคุณต้องแท็บออกจากกล่องข้อความที่เกี่ยวข้อง
Pawan

@ ปวันที่ไม่จริง (อีกแล้ว?). อินพุตที่เชื่อมโยงกับดาตาลิสต์เริ่มการเปลี่ยนแปลงและป้อนเหตุการณ์อย่างน้อยที่สุด ดูที่นี่ทั้งเหตุการณ์การเปลี่ยนแปลงและการป้อนข้อมูลเริ่มการทำงานของบันทึกคอนโซล
Félix Gagnon-Grenier

1
ตลอดหลายปีที่ผ่านมา หลายปีที่ผ่านมายุ่งอยู่กับไลบรารีของบุคคลที่สามแทนที่จะเป็นโซลูชันที่เรียบง่ายและสะอาดรองรับอยู่แล้ว ...
Félix Gagnon-Grenier

3

Select2 สำหรับปลั๊กอิน Bootstrap 3 เนทีฟ

https://fk.github.io/select2-bootstrap-css/index.html

ปลั๊กอินนี้ใช้ปลั๊กอิน select2 jquery

nuget

PM> Install-Package Select2-Bootstrap


1
สวัสดี. มีความแตกต่างกับคำตอบแรกที่ได้รับการโหวตที่นี่หรือไม่? คุณทำซ้ำคำแนะนำที่เลือก 2 เท่าที่ฉันเห็น?
Félix Gagnon-Grenier


1

ฉันขอแนะนำhttp://www.jqueryscript.net/form/Twitter-Like-Mentions-Auto-Suggesting-Plugin-with-jQuery-Bootstrap-Suggest.htmlทำงานได้มากกว่าคำแนะนำโพสต์ Twitter ที่ให้รายการ ของผู้ใช้หรือหัวข้อตามแท็ก @ หรือ #

ดูการสาธิตที่นี่: http://www.jqueryscript.net/demo/Twitter-Like-Mentions-Auto-Suggesting-Plugin-with-jQuery-Bootstrap-Suggest/

ในอันนี้คุณสามารถเปลี่ยน @ และ # เป็นอะไรก็ได้ที่คุณต้องการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.