这是一个JSFiddle,其中包含一个最小的例子。问题是在Firefox中我点击按钮的位置并不重要。事件的目标始终是按钮。
另一方面,在Chrome中,如果点击跨度,则事件的目标是跨度而不是按钮。
这是预期的行为吗?
我在客户端使用clojurescript在clojure中编写了一个litte webapp,其中包含 以下路线:
(POST "/admin/delete-user" {p :params}
(println (str "Deleted User: "(pr-str (:username p))))
(db/delete-user (:username p))
"Expected return value")
一页包含以下按钮:
<button class="delete btn" data-delete="USERNAME">...</button>
此按钮与以下ClojureScript结合使用:
(listen!
(by-class "delete")
:click (fn [evt]
(let [target (evt/target evt)
username (:data-delete (attrs target))]
(POST "/admin/delete-user"
{:format :edn
:params {:username username}
:handler (fn [resp]
(log "User deleted")
(load-user-table))
:error-handler (fn [resp] (log "Error during user deletion"))})
(log "User " username))))
我使用domina
进行dom操作和事件处理,并cljs-ajax
用于我的ajax请求。该
在我advanced
的设置中使用lein cljsbuild
优化编译代码。
在Firefox上,这段代码运行正常,但是当我在Chrome中使用我的代码时
“有时”得到的行为而不是用户名
按钮data-delete
的{{1}}属性用作参数。
当出现这种情况时,我可以反复点击按钮,什么也没有 发生。然后经过几次点击后,它就能正常工作。
我还检查了cosole输出,没有错误发生,它就是jus
t显示
因此,在记录“用户”后,nil
必须为username
。
Chrome中null
怎么可能为null?
答案 0 :(得分:1)
我发现了问题:
而不是(target evt)
我必须使用current-target
。在Firefox中,点击事件在button
上的Chrome中的span
上触发。