将单击事件动态绑定到列表
dynamically bind click event to list
所以我正在创建一个动态添加内容的网站,我想将点击事件绑定到列表项。问题是我在列表项中有一个列表项,但我似乎无法让第二个列表项工作。
.HTML
<ul id="users" class="grid">
<li>
<figure>
<img src="image source" alt="Title" />
<figcaption>
<div>
<h3>Title</h3>
<ol>
<li> <span>Additional Button</span> </li>
<li> <span>Additional Button</span> </li>
<li> <span>Additional Button</span> </li>
</ol>
</div>
</figcaption>
</figure>
</li>
</ul>
这是 JS
$('ul#users').on("click", "li", function(e) {
console.log($(this));
});
$('.grid ol').on("click", "li", function(e) {
console.log($(this));
});
第一个绑定工作没有问题,但第二个绑定永远不会被调用。有没有人知道如何让它工作。请记住,LI
元素都是动态创建的。
如果所有li
元素都是动态创建的,(ul.grid>li 和 ol>li),那么每次在 .grid>li
中创建元素时,都必须分配要.grid ol > li
的单击处理程序ol
。
另一种方法是尝试从以下位置更改:
$('.grid ol').on("click", "li", function(e) {
console.log($(this));
});
自:
$('.grid').on("click", "li>ol>li", function(e) {
console.log($(this));
});
附言:如果您动态创建元素,则在创建元素时向它们添加处理程序(如果允许应用程序逻辑)。
对动态内容执行事件的简单规则是在最近的外部父级上应用绑定事件,该外部父级不是动态生成的。
例:
$('.grid').on('click', 'ol>li', function(e){
console.log($(this));
});
基本上,只需在未动态创建的父级上绑定事件,并在 .on() 上下文中操作选择器。
您的选择器不起作用,请将其更改为如下所示的内容:
$('ol li').on("click", "li", function(e) {
console.log($(this));
});
相关文章:
- 将值动态绑定到jquery中的切换按钮
- 如何使用AnguarJS动态绑定网站数据
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 我想在ext.js4.2中将树存储动态绑定到树面板中
- 如何让 AngularJS 选取在 JavaScript 中创建的动态绑定
- Emberjs - 将参数动态绑定到视图
- KnockoutJS删除动态绑定
- jquery验证,动态绑定表单验证
- 如何将文件夹中包含的控制器动态绑定到angularjs中的视图
- 在JavaScript中创建动态绑定
- Jquery:如何动态绑定带有onload事件的文本框
- 通过json动态绑定作用域到ng模型
- 如何将变量与函数动态绑定
- jQuery动态绑定文件输入并在函数中检索文件
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- typeahead选择事件(jQuery)的动态绑定
- 如何使用 AngularJS 将值动态绑定到链接
- 将单击事件动态绑定到列表
- Angular js基于复选框动态绑定数据列表
- RivetsJS -动态绑定一个输入到一个列表项