使用ClojureScript的AJAX请求有时在Chrome上具有nil参数

时间:2013-12-17 19:20:57

标签: javascript ajax google-chrome clojure clojurescript

修改

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

1 个答案:

答案 0 :(得分:1)

我发现了问题:

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