2013-03-19 24 views
1

我正在使用Lift web框架。如何使用lift web獲取自動完成文本框的值

我正在實現一個自動完成的文本框。當我在框中輸入一些值時,會打開一個下拉列表。如果我從該列表中選擇一個值,那麼只有我能夠訪問文本框的值。如果我自己寫一個值,那麼我會得到一個空值。

我的代碼:

var friend_name="" 
"#bdayReminder" #> AutoComplete("", 
     getAllName _, 
     value => takeAction(value), 
     List("minChars" -> "3")) 


    private def takeAction(str: String) { 
    friend_name = str 

    } 

請提出一個解決方案

回答

2

免責聲明:我下面庫的作者。

我認爲lift-combobox可以實現你想要的,因爲它具有讓用戶即時創建值的功能。它使用jQuery插件select2,所以你將會在下拉菜單中看到漂亮的外觀。

例如,如果您需要獲取用戶創建的值,它將簡單地如下所示,請注意,我們通常使用Option[T]來表示該值可能不會顯示,例如,用戶可能未選擇任何項目在下拉菜單中:

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 
相關問題