【问题标题】:jQuery ajaxSend - which element has triggered ajax?jQuery ajaxSend - 哪个元素触发了 ajax?
【发布时间】:2015-03-30 15:50:27
【问题描述】:

我正在做一个相当大的项目,我想找出哪个 DOM 元素触发了 ajax 调用。

我有这样的代码:

initAjaxSend: ->
    that = @
    $(document).ajaxSend (e, xhr, options)->
      if typeof event != 'undefined' && event
        e = event
      that.showPreloader(e, xhr)

showPreloader() 函数使用e.target 来查找DOM 元素。

它只能在 Chrome 中正常工作,因为 Chrome 具有全局 event 变量。任何想法如何使它在其他浏览器中工作?

【问题讨论】:

  • 我认为您不需要这两行 - if typeof event != 'undefined' && event; e = event,因为事件已经传递到 ajaxSend
  • 是的,但是e.target 将始终是document,这根本没有帮助,这两条线至少在 Chrome 中有效。也许这段代码的概念是完全错误的,但我没有其他的:)
  • 当然,您什么时候进行 ajax 调用?负载?触发事件?再解释一下,可能会用它来编辑你的问题。
  • 我是这个项目的新手,我不知道所有有 ajax 调用的地方。我被分配给它只是为了快速修复,我想以最通用的方式解决这个问题。这对于触发我的 ajax 调用的问题解决方案有什么不同吗?

标签: javascript jquery ajax coffeescript


【解决方案1】:

您正在混合全局event 和在您的函数被触发时创建的事件e。您要查找的内容可以在触发事件e 中找到,在e.delegateTarget 下,您可以阅读更多关于event.delegateTarget 的信息

引用文档:“对于直接附加到元素的非委托事件处理程序,event.delegateTarget 将始终等于 event.currentTarget。”

initAjaxSend: ->
    that = @
    $(document).ajaxSend (e, xhr, options) ->
        console.log e.delegateTarget   
        that.showPreloader(e, xhr)

【讨论】:

  • 好吧,也许我不懂一些概念,但e.delegateTarget 永远是document
  • 您正在从$(document) 元素中触发ajaxSend,这就是为什么您一直在那里看到它的原因。尝试从另一个元素调用它。
  • @topless 从 jQuery 1.9 开始,不能从 document 以外的另一个元素绑定 ajaxSend 事件jquery.com/upgrade-guide/1.9/…
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 2016-05-03
  • 2011-10-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多