2012-10-08 140 views
3

当keydown事件被按下时,我是否有一种惯用的方式来触发我的formlet的提交动作?用回车键提交

我应该回到DOM操作,还是我可以使用一些Enhance

回答

4

不幸的是,目前没有标准的方法来做到这一点。尽管我们打算在未来的版本中添加它,或者作为Enhance组合器,或者作为Enhance.WithCustomSubmit*的新选项。

创建FPish当我们真正遇到了同样的问题,我们使用以下解决方法:

[<JavaScript>] 
let TriggerOnEnter (formlet : Formlet<'T>) = 
    formlet 
    |> Formlet.MapElement (fun elem -> 
     let e = JQuery.JQuery.Of(elem.Body) 
     e.Keypress(fun _ k -> 
      // Opera uses charCode 
      if k?keyCode = 13 || k?charCode = 13 then 
       JavaScript.SetTimeout (fun _ -> 
        e.Find("input[type=button]").Trigger("click").Ignore 
       ) 100 |> ignore 
      k.StopPropagation() 
     ).Ignore 
     elem 
    ) 

注意,它触发表单的第一个按钮,所以你可能需要调整jQuery选择,使它实际上会触发提交按钮。

+0

您的解决方案就像一个魅力。要查找提交按钮,您可以增强查询:'e.Find(“input [type = button] [class ='submitButton']”)''。但是,如果使用'WithCustomSubmitButton',则样式名称可能会有所不同。我不熟悉W#来告诉如何在按钮布局中找到实际的样式名称。 – bytebuster