【问题标题】:Elm - Dropdown "selected" attribute not working in elm榆树 - 下拉“选定”属性在榆树中不起作用
【发布时间】:2017-10-08 21:44:28
【问题描述】:

我在几个下拉列表中表示了一个层次结构。

当一个项目被选中时,父下拉列表选择驱动子下拉列表的选项。

When a parent is selected, I am populating the children dropdown adding the first element to be blank ("") and display text to be "--select--".

我希望每当父项更改时,默认情况下在子项的下拉列表中选择此项。

问题是,“selected”属性似乎没有发挥作用。

childOptions : String -> Html msg
childOptions val =
    -- This selected attribute does not seem to work
    Html.option [ (Html.Attributes.selected (val == "")), Html.Attributes.value val ] [ Html.text val ]

你可以在这里看到行为:

Ellie editor example

选择父“条目 1”,然后选择子“1.2”。

现在选择父项“条目 2”并注意它忽略了“选定”属性,只有当子条目为空白 (“”) 时才为真。 现在默认选择的条目是“2.2”,这对我来说表明它保持先前选择的元素“1.2”的位置。

关于谁可以解决此问题的任何想法?

【问题讨论】:

    标签: elm


    【解决方案1】:

    问题似乎在于getOptions 函数;因为它的参数没有改变,所以它的输出(每个<option> 元素)也不会改变。而且由于输出没有改变,Elm 不会修改<option> 元素的selected 属性。

    (由于该<select> 没有Msg 事件,Elm 看不到更改事件和新值。)

    getOptions : String -> Html msg
    getOptions val =
        Html.option
            [ Html.Attributes.selected (val == "")
            , Html.Attributes.value val
            ]
            [ Html.text val ]
    

    每个Hierarchy 项目都应该跟踪它的selected 值,并将其传递给getOptions。像这样的:

    getOptions : String -> String -> Html msg
    getOptions selectedValue val =
        Html.option
            [ Html.Attributes.selected (val == selectedValue)
            , Html.Attributes.value val
            ]
            [ Html.text val ]
    

    【讨论】:

    • 我不确定情况是否如此。请参阅 Ellie 中程序的更新版本(我更新了上述问题中的链接)。我现在正在发送消息,并且正在显示在变量中为父下拉菜单和子下拉菜单选择的值。 getOptions中的逻辑很简单……如果值为空,则选择它。
    • @marcio-j 如果 Elm 强制执行该逻辑会怎样?当用户在第二个select 中选择一个选项时,Elm 将取消选择它,因为该值不为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    相关资源
    最近更新 更多