Clojurescript 如何处理与多米娜的委托
我一直在尝试使用 HTML: 我不满意的解决方案(没有非常详细的Domina库): 我尝试过许多解决方案,但都失败了-都有点类似于:Clojurescript 如何处理与多米娜的委托,clojurescript,Clojurescript,我一直在尝试使用 HTML: 我不满意的解决方案(没有非常详细的Domina库): 我尝试过许多解决方案,但都失败了-都有点类似于: (listen! (by-id "my-form") :submit #(do (log "submit suppressed") false)) 我故意不使用click事件,因为我还希望在通过代码或键盘提交表单
(listen! (by-id "my-form") :submit #(do
(log "submit suppressed")
false))
我故意不使用click事件,因为我还希望在通过代码或键盘提交表单时执行函数。当您从
jQuery
事件处理程序中返回false
时,库将自动调用e.preventDefault
和e.stopPropagation
(有关更多信息,请参阅)。调用此函数是控制事件的行为的正确方法
Domina将js/Event
包装在ClojureScript
能够理解的内容中。因此,您可以直接调用preventDefault
和stopPropagation
,而无需使用Javascript互操作。您可以在此处阅读有关此巧妙技巧的更多信息:
此技巧可能是导致返回false
根本不起作用的原因。实现此技巧的方法(查看代码)是使用另一个始终返回true
的函数包装函数
因此,您的代码应该更像这样:
(listen! (by-id "my-form") :submit
(fn [e]
(do
(log "submit suppressed")
(prevent-default e)
(stop-propagation e))))
我已将警报放在事件调用之间。第一次事件调用后-无论是preventDefault还是stopPropagation,之后的所有内容都将被忽略(不再显示警报并提交表单)。可能是Domina包装搞乱了事情。也许你是对的,我会看看并尝试找到解决方法。问题是事件
的Domina包装。我更新了我的答案,很抱歉发布了错误的答案(发布前我无法测试代码).由于某种原因,版主拒绝了你的编辑。我自己编辑了答案。
(set! (.-onsubmit (.getElementById js/document "my-form")) #(do
(.log js/console "submit suppressed")
false))
(listen! (by-id "my-form") :submit #(do
(log "submit suppressed")
false))
(listen! (by-id "my-form") :submit
(fn [e]
(do
(log "submit suppressed")
(prevent-default e)
(stop-propagation e))))