为什么不';t使用PHP动态生成的HTML响应JavaScript


Why doesn't HTML generated dynamically with PHP respond to JavaScript?

HTML在主体上可以工作,但来自PHP的HTML根本没有响应,为什么?我该如何解决这个问题?

以下是我生成HTML的方式。

<?php
echo '<div id="TestClick">Click me</div>'
?>

和JavaScript。

$('#TestClick').click(function(e){
    alert ('working')
});

但这是有效的。

<body>
<div id="TestClick">Click me</div>
</body>

好了,下面是我如何使用ajax从PHP中获取html的。

$.ajax({
    type:"GET",
     url:"../php/feed.php"
    }).done(function(feedback){
$('#feed').html(feedback)
});

如果您的JavaScript位于页面的HEAD中,请确保等待document.ready事件绑定DOM事件。

$(document).ready(function() {
    $('#TestClick').click(function(e){
        alert ('working')
    });
});

这是一种通用的最佳实践,因为在JavaScript与DOM(HTML代码)交互之前,需要解析DOM

注意,jQuery $(document).ready:有一个简写

$(function() {
    $('#TestClick').click // etc ...
});

如果您通过AJAX加载这个元素,那么您需要在AJAX请求完成并将元素添加到DOM后处理事件。此外,您还可以使用事件冒泡来将事件侦听器委派到更高级别的DOM元素(例如document)。

$(document).on('click', '#TestClick', function() { /* your stuff */ });

最后但同样重要的是,确保DOM中没有重复的ID。这也可能导致破损。

可能您的元素是在调用点击处理程序之后创建的,因为它不在那里,所以没有附加处理程序。

尝试在php代码之后运行该javascript

编辑

尝试

$.ajax({
    type:"GET",
    url:"../php/feed.php"
}).done(function(feedback){
    $('#feed').html(feedback);
    $('#TestClick').click(function(e){
        alert ('working')
    });
});

在页面加载后使用AJAX加载某些内容时,.click()事件已绑定到现有DOM元素,但未绑定到新的DOM元素。
你可以试试这个:

$.ajax({
    type:"GET",
     url:"../php/feed.php"
    }).done(function(feedback){
       $('#feed').html(feedback).click(function(e){
           alert ('working')
       )};
    });
});