【发布时间】:2012-09-09 23:58:56
【问题描述】:
在 HTML 中,ID="project_pick" 的下拉菜单将触发更改事件,将所选值发送到 getallreports.php 文件。这行得通。 PHP 文件执行 MySQL 查找并在一些 HTML 中返回值。这也有效,并且在页面上看起来很棒。下面是将所选项目发送到 PHP 文件的 jQuery/ajax 代码:
$('#project_pick').change(function(e) {
$.ajax({
type: "POST",
url: "getallreports.php",
data: "project_id=" + $(this).val(),
success:function(data){
$('#reportstable').html(data);
}
});
});
返回的数据出现在指定的 div 内,并包含具有特定 ID 的锚标记,这些 ID 应该允许其他 JQuery 事件发生。返回的 HTML 片段:
<table><tr>
<td>Report 1</td><td><a href="#" id="change_1">click to change</a></td>
<td>Report 2</td><td><a href="#" id="change_2">click to change</a></td>
</tr></table>
上面点击事件触发的jQuery代码是:
$('#change_1').click(function() {
alert('Change Report One was clicked');
});
但是,单击上面的锚标记没有任何作用。此外,返回的 HTML 甚至不会出现在源代码中——尽管它显示在屏幕和 firebug 中。
我错过了什么?如何触发该点击事件?
编辑:
我被提醒过 .on('click', etc) 事件(感谢 Michael 和 Zirkms),但是当我尝试将它添加到我的代码中时,下拉列表的 .change 事件停止触发。也许下面的代码需要改头换面?
$('#project_pick').on(change(function(e) {
$.ajax({
type: "POST",
url: "getallreports.php",
data: "project_id=" + $(this).val(),
success:function(data){
$('#reportstable').html(data);
}
});
});
【问题讨论】:
-
动态创建的元素永远不会显示在页面源中,因为该源是原始 http 请求下载的静态标记。它们会并且确实会显示在 Firebug 或其他 DOM 检查工具中。
-
您的问题并不清楚。您是否定义了
$('#test').click()before 它是在 DOM 中创建的?如果是这样,它将不受约束。您需要使用.on('click')来绑定未来的元素。 -
@Michael 感谢您的解释。我看过一些关于 .on() 的东西,但是当我添加它时,下拉菜单停止工作。很明显我做错了。我将编辑 OP 以发布代码示例。请注意,返回的 HTML 应该有几个这样的可点击 ID(我正在返回一个报告列表和相应的“点击更改”锚标记。当点击一个时,用户可以选择不同的报告文档。因此,每个必须有自己的 ID .)
-
@FUTURE READERS - 对于那些想知道 Michael 和 zirkms 回复中的#test ref 的人,原始问题显示了一个返回的表格,其中包含一个带有 ID="test" 的可点击锚标记。我重新编辑了问题以显示两个可点击的锚标签,因为我认为这很重要,而且我更好地描述了它们的使用方式。我还将 标记 ID 从“test”重命名为“change_1”和“change_2”。我从 M 和 Z 的回答中不明白的是 .on('click', #element...) 是在这些 change_1 和 change_2 标签上实现的,而不是在 #project_pick 下拉列表中。