带有 ClojureScript 的 AJAX Request 有时在 Chrome 上将 nil 作为参数
AJAX Request with ClojureScript sometimes has nil as parameter on Chrome
>Edit
下面是一个带有最小示例的 JSFiddle。问题是在Firefox中,我单击按钮的位置并不重要。事件的目标始终是按钮。
另一方面,在Chrome中,如果我单击跨度,事件的目标是跨度而不是按钮。
这是预期的行为吗?
源语言
我在客户端使用clojurescript在clojure中编写了一个litte 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
设置中的advanced
优化编译的。
在火狐上,这段代码工作正常,但是当我在Chrome中使用我的代码时,我"有时"得到的行为,而不是用户名在 按钮nil
的data-delete
属性用作参数。
当这种行为发生时,我可以反复点击按钮,什么都没有发生。然后经过几次点击后它就可以工作了。
我还检查了共生输出,没有发生错误,而且T 显示登录"用户"后没有任何内容,因此username
必须null
。
如何在 Chrome 中username
为空?
我发现了问题:
而不是(target evt)
我必须使用current-target
.在 Firefox 中,点击事件是在 Chrome span
上的button
上触发的。
相关文章:
- Chrome WebKitGetUserMedia
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- 在chrome.tabs.onCreated之后加载HTML页面
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- chrome扩展更改主机/域警告
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 激活chrome上的chrome.notifications对象
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- JS可以在Chrome中工作,但不能在Firefox中工作
- Chrome加载旧版本的Javascript文件
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 带有 ClojureScript 的 AJAX Request 有时在 Chrome 上将 nil 作为参数