编辑
下面是一个包含最小示例的JSFiddle。问题是,在Firefox中,我在哪里点击按钮并不重要。事件的目标始终是按钮。
另一方面,在Chrome中,如果我点击跨度,事件的目标是跨度,而不是按钮。
这是预期的行为吗?
原创
我在客户端使用clojurescript用clojure编写了一个小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请求。代码是在我的lein cljsbuild设置中使用advanced优化进行编译的。
在火狐上,这段代码运行得很好,但是当我在Chrome中使用我的代码时,我“有时”会得到这样的行为:按钮nil的data-delete属性中的用户名被用作参数。
当此行为发生时,我可以重复单击该按钮,但没有任何反应。然后,在点击几次之后,它就可以工作了。
我还检查了cosole输出,没有出现错误,并且在记录"User“后没有显示任何内容,因此username必须为null。
在Chrome中username怎么可能是空的?
发布于 2013-12-18 18:21:17
我发现了问题:
我必须使用current-target而不是(target evt)。在火狐中,点击事件是在span上Chrome的button上触发的。
https://stackoverflow.com/questions/20642812
复制相似问题