榆树在用户输入时自动完成
Elm Autocomplete On User Input
我对Elm很陌生。我在网页上有一个输入字段。当用户在输入字段中键入时,我想查询单词列表(存储在 initialModel 中),并根据输入字段中键入的内容给出完成建议。我想我需要Html.Events的按键,所以我已经导入了它。我知道我还需要一个更新功能,所以我包含了空函数。这是我到目前为止的代码。提前谢谢。
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import StartApp.Simple as StartApp
-- MODEL
type alias Model =
{
words: List String
}
initialModel : Model
initialModel =
{
words =
[ "chair", "sofa", "table", "stove", "cabinet", "tv", "rug", "radio", "stereo" ]
}
-- UPDATE
update =
{
}
-- VIEW
title : String -> Html
title message =
message
|> Html.text
pageHeader : Html
pageHeader =
h1
[ ]
[ title "Hello" ]
pageFooter : Html
pageFooter =
footer
[ ]
[ a [ href "#" ]
[ text "Hello" ]
]
inputField : Html
inputField =
input
[ type' "text" ]
[ ]
view : Html
view =
div
[ id "container" ]
[ pageHeader
, inputField
, pageFooter
]
-- BRING MODEL, VIEW AND UPDATE TOGETHER
main =
view
-- StartApp.start
-- {
-- model = initialModel
-- , view = view
-- , update = update
-- }
模型需要跟踪文本框的当前值。您可以从创建在update
函数期间更新 model.value 的 SetValue
操作开始:
type alias Model =
{ value : String
, words : List String
}
initialModel : Model
initialModel =
{ value = ""
, words =
[ "chair", "sofa", "table", "stove", "cabinet", "tv", "rug", "radio", "stereo" ]
}
type Action
= SetValue String
update action model =
case action of
SetValue value ->
{ model | value = value }
您还需要在该文本框的输入时触发更新函数。您可以使用 on
事件属性执行此操作。侦听输入事件是很常见的,它为您提供的信息比单个按键事件更多:
inputField : Address Action -> Html
inputField address =
input
[ type' "text"
, on "input" targetValue (Signal.message address << SetValue)
]
[ ]
最后,您需要显示一个包含自动完成内容的div:
autocomplete model =
let
matches =
List.filter (startsWith model.value) model.words
in
div []
[ div [] [ text <| "Autocomplete input: " ++ model.value ]
, div [] [ text "Autocomplete matches: " ]
, div [] <| List.map ('w -> div [] [ text w ]) matches
]
如果您决定变得更复杂,并且想要一个外部源进行自动完成,则需要切换到StartApp而不是StartApp.Simple,因为它支持效果和任务。
上面的代码片段依赖于您最初发布的内容的其他一些更改,因此我发布了一个要点,其中包含一个可以插入 http://elm-lang.org/try 的工作示例。希望这有帮助!
相关文章:
- 使用javascript搜索具有用户输入的数组
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何使用JavaScript中的用户输入创建序列/序列
- 如何在用户输入时实例化数组
- 如何从客户端的数组中获取用户输入和返回值
- 如何在用户输入 javascript 时更改值
- 如何从多个不同的html页面获得mongodb文档的用户输入
- 阻止用户将脚本输入wordpress post
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 用于输入用户信息的动态PHP代码
- 在MongoDB中输入用户名数组,并返回相同大小的id数组,对于不存在的用户名为null或false
- 如何通过文本字段输入用户数据,然后在文本字段的正下方显示
- 脚本自动输入用户凭据
- 如何获取用户文本输入用户创建输入的值,jQuery
- 在网站服务器上存储表单/输入/用户首选项数据有哪些不同的方法?
- 使用if语句输入用户文本
- 不能在indexedDB中输入用户信息后立即提取用户信息