Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将单击处理程序附加到动态生成的锚标记_Javascript_Jquery - Fatal编程技术网

Javascript 将单击处理程序附加到动态生成的锚标记

Javascript 将单击处理程序附加到动态生成的锚标记,javascript,jquery,Javascript,Jquery,我动态生成一些标记并将其注入DOM,如下所示: content+='<td><a class="reportLink" onclick="showReport();return false;" href="'+layerResults.features[i].attributes['Information_External']+'">Info</a></td>'; function showReport() { console.log('st

我动态生成一些标记并将其注入DOM,如下所示:

content+='<td><a class="reportLink" onclick="showReport();return false;" href="'+layerResults.features[i].attributes['Information_External']+'">Info</a></td>';
function showReport() {
  console.log('stopped');
}
仍然不能阻止链接从我的页面导航出去

第二个问题是,当我尝试使用

jQuery('.reportLink'.on('click', function(e) {
  e.preventDefault();
  console.log('clicked');
});
这件事永远不会发生。我正在使用jquery1.7.2


这让我有点疯狂,因为这是一项简单的任务,我在jQuery中已经做了无数次为了防止它离开,请在console.log'stopped'之后立即输入它

return false;
对于第二个,我通常使用这种语法,也许它会有帮助:

jQuery(".reportLink").click(function() {
    //do something
});

为了防止它离开,请在console.log'stopped'之后立即输入此命令

return false;
对于第二个,我通常使用这种语法,也许它会有帮助:

jQuery(".reportLink").click(function() {
    //do something
});

将事件处理程序委托给加载dom时存在的父元素。您可以将主体替换为该父对象

jQuery('body').on('click','.reportLink', function(e){
   e.preventDefault();
   console.log('clicked');
});
来自jquery文档

事件处理程序仅绑定到当前选定的元素;在代码调用.on时,它们必须存在于页面上。要确保元素存在并且可以选择,请在页面上HTML标记中的元素的文档就绪处理程序中执行事件绑定。如果将新HTML注入页面,请在将新HTML放入页面后选择元素并附加事件处理程序。或者,使用委派事件来附加事件处理程序,如下所述

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

除了能够处理尚未创建的子元素上的事件外,委托事件的另一个优点是,当必须监视许多元素时,它们的开销可能会低得多。在tbody中包含1000行的数据表上,此示例将处理程序附加到1000个元素:


将事件处理程序委托给加载dom时存在的父元素。您可以将主体替换为该父对象

jQuery('body').on('click','.reportLink', function(e){
   e.preventDefault();
   console.log('clicked');
});
来自jquery文档

事件处理程序仅绑定到当前选定的元素;在代码调用.on时,它们必须存在于页面上。要确保元素存在并且可以选择,请在页面上HTML标记中的元素的文档就绪处理程序中执行事件绑定。如果将新HTML注入页面,请在将新HTML放入页面后选择元素并附加事件处理程序。或者,使用委派事件来附加事件处理程序,如下所述

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

除了能够处理尚未创建的子元素上的事件外,委托事件的另一个优点是,当必须监视许多元素时,它们的开销可能会低得多。在tbody中包含1000行的数据表上,此示例将处理程序附加到1000个元素:


这正是我在另一个线程中找到的解决方案,但它没有启动。我把它放在创建DOM节点的回调函数中,它工作得非常好。谢谢。这正是我在另一个线程中找到的解决方案,但它没有启动。我把它放在创建DOM节点的回调函数中,它工作得非常好。谢谢。return false不是取消冒泡的正确方法。但不可否认,我确实尝试过。return false不是取消冒泡的正确方法。但不可否认,我确实试过了。