单击在新创建的列表项上不触发事件
click event not firing on newly created list item
我有两个列表,当你点击第二个列表时,第一个列表删除了第一个项目并添加到第二个列表中,但是当我点击新创建的列表项目时,它不会触发,为什么会这样?jsFiddle演示
$('#SearchList li a').bind("click", function () {
var $this = $(this).unwrap('<a href="#"></a>').remove().text();
var $that = $('#Search li:first').remove().text();
$('<li>' + $this + '</li>').insertBefore('#Search li:first')
$('#SearchList').append('<li><a href="#">' + $that + '</a></li>');
});
<ul id="Search">
<li>Electronics</li>
<li>Image</li>
</ul>
<ul id="SearchList">
<li><a href="#">Interests</a></li>
<li><a href="#">Entertainment</a></li>
<li><a href="#">Clothing</a></li>
<li><a href="#">Pharmacy</a></li>
<li><a href="#">Home & Garden</a></li>
</ul>
.bind()
只影响已经在DOM中的元素,你想使用.delegate()
或.on()
(如果你使用jQuery 1.7+):
$('#SearchList').on("click", " li a", function () {
var $this = $(this).unwrap('<a href="#"></a>').remove().text();
var $that = $('#Search li:first').remove().text();
$('<li>' + $this + '</li>').insertBefore('#Search li:first')
$('#SearchList').append('<li><a href="#">' + $that + '</a></li>');
});
注意:.live()
已经贬值为jQuery 1.7,所以使用.on()
或.delegate()
是一个好主意。
下面是上述解决方案的一个示例(使用jQuery 1.7): http://jsfiddle.net/jasper/pgwdv/
部分文档链接:
-
.on()
: http://api.jquery.com/on -
.delegate()
: http://api.jquery.com/delegate
你应该试试用。live代替。bind。
您可以使用live函数来保持click(和其他)处理程序对动态添加的内容处于活动状态。
代替
$('#SearchList li a').bind("click", function () {
使用$('#SearchList li a').live("click", function () {
相关文章:
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 如何刷新列表框内容onclick或blur事件
- 如何在HTML列表中添加事件's子弹
- 当触发下拉列表的onchange事件时,使用JavaScript提交表单
- 将事件列表滚动到给定月份的第一个事件
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- SVG-全局属性和事件的列表
- 如何从加载的JSON文件构建外部事件列表
- 有没有一种方法可以在没有jQuery的情况下获得JavaScript中当前添加到后台的事件列表
- 通过更改HTML元素上的动态类名来处理事件列表器
- 事件列表器不适用于追加的项目
- 使用 JQuery 将事件列表器添加到动态添加的元素
- 谷歌日历事件列表jQuery格式
- 将事件列表器添加到多个图像
- 动态加载图像并附加加载事件列表器
- 从谷歌日历 API 中的事件列表中检索实例
- 如何在类上设置实时事件列表器,以自动调整其高度并调整其内容的大小
- 在DOM中触发的事件列表
- Jquery点击事件列表上的锚
- Javascript移动事件列表