我想使用带有 ajax 的自动完成功能。所以我的目标是:
当用户在文本字段中键入内容时,会出现服务器提供的一些建议(我必须在数据库中找到建议)
当用户按下“enter”,点击自动完成框以外的其他地方,或者当他/她选择一个建议时,文本字段中的字符串被发送到服务器。
我首先尝试使用 lift 提供的自动完成小部件,但我遇到了三个问题:
- 它是一种扩展选择,也就是说您最初只能提交建议值。
- 它不适合与 ajax 一起使用。
- 与
WiringUI
.
所以,我的问题是:如何结合jquery 自动完成并与服务器交互。我想我应该使用一些回调,但我不掌握它们。
提前致谢。
更新这是我尝试的第一个实现,但回调不起作用:
private def update_source(current: String, limit: Int) = {
val results = if (current.length == 0) Nil else /* generate list of results */
new JsCmd{def toJsCmd = if(results.nonEmpty) results.mkString("[\"", "\", \"", "\"]") else "[]" }
}
def render = {
val id = "my-autocomplete"
val cb = SHtml.ajaxCall(JsRaw("request"), update_source(_, 4))
val script = Script(new JsCmd{
def toJsCmd = "$(function() {"+
"$(\"#"+id+"\").autocomplete({ "+
"autocomplete: on, "+
"source: function(request, response) {"+
"response("+cb._2.toJsCmd + ");" +
"}"+
"})});"
})
<head><script charset="utf-8"> {script} </script></head> ++
<span id={id}> {SHtml.ajaxText(init, s=>{ /*set cell to value s*/; Noop}) } </span>
}
所以我的想法是:
- 通过一个
SHtml.ajaxText
字段获取选定的结果,该字段将被包装到一个自动完成字段中 - 使用 javascript 函数更新自动完成建议