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

标签 javascript ajax google-chrome clojure clojurescript

编辑

这是一个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/

相关文章:

javascript - 如何在一页上显示 2 个模式,在 Bootstrap 中一个左对齐另一个右对齐?

javascript - 删除由缩放引起的谷歌地图上的网格线

jquery - 当 jquery ajax 发布带有 processData=false 的 formdata 时,csrf_token 的 Django 响应 403 被拒绝

javascript - 使用 JSF 中 javascript 传递的变量触发 commandButton 操作

javascript - Chrome 文件链接过长 - 选项卡崩溃

html - Chrome、Flexbox 和 fat div

javascript - 有没有办法覆盖输入类型数字的递增/递减处理?

php - 插件在 CodeIgniter 中不起作用

发布时的 Javascript 数组(AJAX)作为单个字符串接收

css - 输入行高 chrome/opera/ie