将事件处理程序添加到运行时创建的DOM树中的特定子级
Adding an event handler to a specific children within a DOM tree that is created on runtime
我正在尝试将事件处理程序绑定到DOM树中的一个子元素,该元素在运行时添加到HTML动态中。下面的HTML显示了我得到的内容。该表及其thead和tbody是静态HTML。稍后我将添加tbody(<tr><td><img src="bla.png"></td></tr>
)的内容。
<table id="progData">
<thead>
<th>Image</th>
</thead>
<tbody>
<tr><td><img src="bla.png"></td></tr>
</tbody>
</table>
所以现在我想在图像上绑定一个事件处理程序,比如:
$("#progData").on("click", "img", function(e){/*do sth in here*/});
但由于某种原因,这并不奏效。我必须使用
$("#progData").on("click", "tr", function(e){/*do sth in here*/});
以使其至少在单击行时工作。
有没有任何方法可以将事件绑定到DOM中比直接子元素更深的动态元素?
啊,对不起。我在事件处理程序中的回调函数中出现了一个错误。由于在访问一些只存在于"tr"中的属性之前,我必须使用"tr"。因此,当我将处理程序更改为"img"对象时,我只是忘记了现在通过parent()函数访问属性…:/
所以这只是我的错误。问题已解决:)
您可以尝试执行-
$("#progData").find("img").on("click", function(e){/*do sth in here*/});
如果在命中代码之前已经加载了HTML。
或
您可以尝试在动态内容中添加一个类,然后绑定它的点击事件,如
HTML-
<tr><td><img class="jMyImage" src="bla.png"></td></tr>
Javascript-
$(".jMyImage").on("click", function(e){/*do sth in here*/});
我猜您正试图将事件附加到一个仍然不存在的标记。我的意思是,您应该检查在插入表行的时刻之后添加事件侦听器的时刻。例如,这对我有效:
var onImageLoaded = function() {
$("#progData").on("click", "img", function(e){
if(e.currentTarget.tagName == 'IMG') {
console.log("clicked");
}
})
}
var table = $("#progData");
table.find("tbody").html("<tr><td><img src='"http://krasimirtsonev.com/blog/articles/CSSThePowerOfInherit/icon-bullet.jpg'" onload='"javascript:onImageLoaded();'"></td></tr>");
JSFiddle->http://jsfiddle.net/krasimir/ybavx/
如果我理解正确,这应该是你想要的:
$(document).on("click", "#progData img", function(e){/*do sth in here*/});
或者如果你只想要第一个:
$(document).on("click", "#progData img:nth-child(2)", function(e){/*do sth in here*/});
由于元素是动态添加的,您需要附加到文档中,因为元素尚未创建或是在文档创建后创建的。更多信息可在此处找到:http://api.jquery.com/on/
相关文章:
- 向动态生成的DOM添加Angular自定义指令
- 通过AJAX侦听向DOM添加某些元素
- 是否可以加快向DOM添加一组元素的速度
- 通过访问DOM添加功能
- angular2:使用*ngIf构建svg图标不会给DOM添加任何内容
- 如何在声明后运行DOM添加的指令
- 在对象创建器中向 DOM 添加选项
- 向 DOM 添加新元素时出现问题
- AngularJS:如何从服务向 dom 添加和编译指令
- 使用 MathJax 向 DOM 添加元素
- 向 DOM 添加一个简单的图像标记,而不是使用 GWT 控件以获得更好的 JS 运行时性能
- IE在通过Javascript向DOM添加大量HTML时太慢
- JavaScript/CSS:向DOM添加元素和应用其CSS规则之间的延迟
- 在向DOM添加元素时调用Meteor助手函数
- Angularjs在单击时向DOM添加元素
- 如何避免第一行被删除,同时使用DOM添加和删除html表行
- 动态地向dom添加事件侦听器
- 在每次迭代时向DOM添加一个元素,而不是在循环结束时添加全部元素
- 如何在向DOM添加新元素后重新加载函数
- 动态地向DOM添加和删除样式表