1

当我使用 ajax 从“echo”PHP 获取 html 代码时,我需要继续 JS 代码,但它根本不起作用,只有当我使用“echo”PHP 发送 JS 代码时它才有效

例如:

我有一个用 PHP 发送 HTML 代码的地方

我发送带有“add_comment”类的按钮

换句话说,当页面加载时,这个按钮不存在,但存在 JS 代码:

            $('.add_comment').click(function(){
                console.log('good');    
            })   

因此,当我仅发送按钮时,此代码不起作用,但是当我发送按钮和此 JS 代码时,它运行良好...

我的问题是:在不发送带有 HTML 的 JS 代码的情况下解决这个问题,因为这确实不是一个好的决定。

4

3 回答 3

1

DOM 准备好后添加的元素是动态的,需要委托事件处理程序:

$(document).on('click', '.add_comment', function(){
    console.log('good');    
});

替换document为动态元素的最近的非动态父级

于 2013-11-09T19:01:10.050 回答
1

您需要使用代表。.on与选择器一起使用document

$(document).on('click', '.add_comment', function(){
    console.log('good');    
});

从文档:

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。例如,此元素可以是模型-视图-控制器设计中视图的容器元素,或者如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他 HTML 之前,文档元素在文档头部是可用的,因此在此处附加事件是安全的,而无需等待文档准备好。

于 2013-11-09T19:01:21.190 回答
1

如果我理解你的问题,你应该考虑做这样的事情:

$("body").on("click", ".add_comment", function() {
   // Your code here
});

这会在正文上注册一个事件处理程序,该处理程序在页面加载时确实存在,以侦听与 .cs 的 CSS 选择器匹配的冒泡事件.add_comment

于 2013-11-09T19:01:25.027 回答