2017-06-06 23 views
0

我懂得去傾聽在榆樹標籤按鍵。我知道如何使用onWithOptions被更改時停止焦點:HTML textarea的地方壓片增加了噸,不改變焦點

textarea 
    [ onWithOptions "keydown" (Options False True) <| Decode.map KeyDown keyCode ] [] 

我可以再檢查,在我update功能,如果按下keyCode是9,代表一個標籤。問題是現在textarea的默認行爲不起作用。我輸入的任何內容都不會出現在textarea中。很容易的,我只是添加任何I型到model,使textarea模型的價值。現在我遇到了光標問題,更重要的是,剪貼板粘貼不起作用...

如何使用標籤在Elm中使用textarea?通常,如果按Tab鍵,只調用preventDefault()似乎有意義。如何在Elm中有條件地撥打preventDefault()

+0

就拿這種類型的東西一看變通[@sentience創造(https://github.com/elm-lang/virtual-dom/issues/18#issuecomment-273403774)。它不是理想的,但它應該讓你有你需要的,直到我們有條件事件傳播。 –

+0

我的工作方式與@sentience在該問題中所寫的類似,但更簡單。謝謝! –

回答

1

榆樹確實通過Decoder即成功或失敗支持條件事件傳播。只要map你想在你的update功能作出反應的消息類型:

succeededIfTabKey : Int -> Decode.Decoder Int 
succeededIfTabKey key = 
    if key == 9 then 
     Decode.succeed key 
    else 
     Decode.fail "non-tab" 

tabPressed : Decode.Decoder Msg 
tabPressed = 
    Decode.andThen succeededIfTabKey keyCode 
     |> Decode.map (always TabPressed) 

然後用這個作爲你的屬性,你的投入要素:

onWithOptions "keydown" { defaultOptions | preventDefault = True } tabPressed 

這不是理想的適用於所有情況。如果你想一些​​事件不preventDefault(),和其他​​事件preventDefault(),那麼你的運氣了。