【问题标题】:Can't click on element rendered via AJAX无法点击通过 AJAX 呈现的元素
【发布时间】:2026-02-23 16:50:01
【问题描述】:

标题内容通过 Ajax 渲染:

<script>
            $(document).ready(function() {
                var loadingTimer = setInterval(animate_loading, 66);
                $.post('home/load_header', {}, function(data) {
                    clearInterval(loadingTimer);            
                    $("#header_content").html(data);              
                });
            });
        </script>

我正在尝试访问.switch_language,但是当我签入CTR+U 窗口时,html 中没有这样的内容。只有上面的JS。 .switch_language 存在,但只能在 F12/ELements 选项卡中找到。也试过wait(SECONDS)waitForSelector。每次Cannot dispatch click event on non-existing element.

【问题讨论】:

  • 可能包含附加点击事件的代码?我敢打赌这是一个竞赛条件。
  • 在你想要获取的地方添加代码。

标签: javascript casperjs


【解决方案1】:

CTRL+U 是查看页面源代码,显示发送到浏览器的服务器端 HTML。它不包含活动 DOM 的结构以及在页面提供给您之后发生的任何更改——即由 JavaScript 或 Ajax 等异步事件更改的任何内容。

对于实时 DOM,您应该使用 Web Inspector(或等效的...不同的浏览器称它略有不同——它是 Chrome 中的 DevTools)。

由于您使用的是 JQuery,您可以将事件附加到尚不存在 w/live() 的元素。

【讨论】:

  • 不要使用.live() API,它在 jQuery 1.7 中被弃用,在 jQuery 1.9 中被移除。而是使用.on() API。如果您需要附加执行 JS 时不存在的事件,您将需要使用 delegated event handler。对于这个问题,这基本上意味着运行类似$(document).on('click', '.switch_language', function(event) { ... });
  • 在 live() 与 on() 上取得了不错的成绩。你是对的。我最近在一个带有 jQ​​uery 1.7 的网站上做了一些支持工作,所以这是我首先想到的。
最近更新 更多