我正在使用Lift web框架。
我正在实现一个自动完成的文本框。当我在框中输入一些值时,会打开一个下拉列表。如果我从该列表中选择一个值,那么我才能访问文本框的值。如果我自己写一个值,那么我得到一个空值。
我的代码:
var friend_name=""
"#bdayReminder" #> AutoComplete("",
getAllName _,
value => takeAction(value),
List("minChars" -> "3"))
private def takeAction(str: String) {
friend_name = str
}
请建议解决方案
答案 0 :(得分:2)
免责声明:我是以下图书馆的作者。
我认为lift-combobox可以达到您想要的效果,因为它具有让用户即时创建价值的功能。它使用select2 jQuery插件,因此您可以在下拉菜单中获得漂亮的外观。
例如,如果您需要获取用户创建的值,它将简单地如下所示,请注意我们通常使用Option[T]
来表示可能不会显示该值,例如,用户可能不会完全选择了drop-menu中的任何项目:
var friend_name: Option[String] = None
val friendsMenu = new ComboBox(
default = None,
allowCreate = true
) {
// This is where you build your combox suggestion
override def onSearching(term: String): List[ComboItem] = {
val names = List(
ComboItem("f1", "Brian"), ComboItem("f2", "Alice"),
ComboItem("f3", "Luke"), ComboItem("f4", "Smith"),
ComboItem("f5", "Brandon")
)
names.filter(_.text.contains(term))
}
override def onItemSelected(selected: Option[ComboItem]): JsCmd = {
friend_name = selected
// The returned JsCmd will be executed on client side.
Alert("You selected:" + selected)
}
// What you want to do if user added an item that
// does not exist when allowCreate = true.
override def onItemAdded(text: String): JsCmd = {
friend_name = Some(text)
}
}
"#bdayReminder" #> friendsMenu.combobox