Javascript 带有ClojureScript的AJAX请求有时在Chrome上使用nil作为参数 编辑

Javascript 带有ClojureScript的AJAX请求有时在Chrome上使用nil作为参数 编辑,javascript,ajax,google-chrome,clojure,clojurescript,Javascript,Ajax,Google Chrome,Clojure,Clojurescript,下面是一个简单的例子。问题是,在Firefox中,我在哪里单击按钮并不重要。事件的目标始终是按钮 另一方面,在Chrome中,如果单击范围,事件的目标是范围而不是按钮 这是预期的行为吗 起初的 我在clojure中使用客户端的clojurescript编写了一个小Web应用程序,其中包含 以下路线: (POST "/admin/delete-user" {p :params} (println (str "Deleted User: "(pr-str (:username p))

下面是一个简单的例子。问题是,在Firefox中,我在哪里单击按钮并不重要。事件的目标始终是按钮

另一方面,在Chrome中,如果单击范围,事件的目标是范围而不是按钮

这是预期的行为吗

起初的 我在clojure中使用客户端的clojurescript编写了一个小Web应用程序,其中包含 以下路线:

(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>
我使用
domina
进行dom操作和事件处理,使用
cljsajax
进行ajax请求。这个 代码是使用
lein cljsbuild
的我的设置中的
advanced
优化来编译的

在firefox上,这段代码运行良好,但当我在Chrome中使用我的代码时 “有时”获取的行为,而不是 按钮
nil
data delete
属性用作参数

当这种行为发生时,我可以反复点击按钮,什么也不做 发生。然后,在多次点击后,它就可以工作了

我还检查了cosole输出,没有出现错误,它是正确的 t秀 因此,在记录“用户”后,用户名必须为空

在Chrome中,
username
怎么可以为空?

我发现了问题:


我必须使用当前目标,而不是
(目标evt)
。在Firefox中,点击事件在Chrome的
按钮
上触发,该按钮位于
span

上。您是否100%确定事件目标始终是
元素本身,而不可能是某个子元素(图标或
或其他任何东西)?我想是这样,但我还是测试了它。按钮中带有图标的span元素似乎“有时”接收事件。我将为我的问题写一个小附录,因为我仍然感到困惑。。。
(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))))