gpt4 book ai didi

javascript - Chrome 上使用 ClojureScript 的 AJAX 请求有时会有 nil 作为参数

转载 作者:行者123 更新时间:2023-11-28 01:43:07 24 4
gpt4 key购买 nike

编辑

这是一个JSFiddle用一个最小的例子。问题是,在 Firefox 中,我点击按钮的位置并不重要。事件的目标始终是按钮。

另一方面,在 Chrome 中,如果我单击跨度,则事件的目标是跨度而不是按钮。

这是预期的行为吗?

原版

我在客户端使用 clojurescript 在 clojure 中编写了一个小型 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>

此按钮与以下 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 设置中使用高级优化进行编译的。

在 Firefox 上,这段代码工作正常,但是当我在 Chrome 中使用我的代码时,我“有时”得到的行为而不是用户名按钮的 data-delete 属性 nil 用作参数。

当发生这种行为时,我可以重复单击该按钮,但什么也没有发生。然后多次点击后就可以了。

我还检查了控制台输出,没有发生错误,只是t 显示记录“User”后没有任何内容,因此用户名必须为null

Chrome 中用户名怎么可能为空?

最佳答案

我发现了问题:

我必须使用current-target,而不是(target evt)。在 Firefox 中,点击事件是在 Chrome 中 span 上的 button 上触发的。

关于javascript - Chrome 上使用 ClojureScript 的 AJAX 请求有时会有 nil 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com