在动态创建的元素上触发三次单击事件
Three time firing of click event on dynamically created element
我面临着非常简单的问题。我正在尝试在动态生成的元素上添加点击事件,如下所示
$(document).ready(function(){
$('ul').on('click', 'li.clickable', function() {
console.log( $(this).text() );
});
});
<ul id="codingView">
<li id="" style="display:none;" class="clickable"><span></span></li>
</ul>
在这里,我动态地创建了两个li
元素。
问题是控制台每次单击li
都会写入 3 次。为什么?任何解决方法。
编辑
var $box=$('#codingView li:eq(0)');
$('#codingView').empty();
$.each(data,function(key,value){
console.log(this.topic);
$box.find("span").html(this.topic);
$box.css("display","block");
$box.clone().appendTo("#codingView");
});
听起来您可能将<li>
嵌套在彼此内部。我会确保生成的HTML是你认为的那样。
我不确定为什么你的代码不起作用,但这似乎工作得很好
<ul id="codingView"></ul>
$(function() {
var cv = $('#codingView');
cv.on('click', 'li.clickable', function() {
console.log($(this).text());
});
for(var i = 0; i < 5; ++i) cv.append($('<li/>', {'class' : 'clickable'}).html('<b>I AM #' + i + '</b>'));
});
//编辑:用您的新代码更新了小提琴,对其进行了一点更改:
$(function() {
var cv = $('#codingView');
$('#codingView').empty();
var data = [{topic: 1}, {topic: 2}, {topic: 3}];
$.each(data,function(){
console.log(this.topic);
var li = $('<li/>', { 'class': 'clickable'}).append($('<span/>').html(this.topic));
li.appendTo(cv);
});
cv.on('click', 'li.clickable', function() {
console.log($(this).text());
});
});
相关文章:
- socket.io发射三次
- SVG实现的单调三次插值没有像d3这样的库
- readyState=4三次.Ajax-由警报引起
- Raphael悬停事件和调整大小框在第三次鼠标悬停后发生故障
- Javascript拉斐尔奇怪的闪烁发生在我鼠标悬停的第三次
- JQuery只检查了一次事件工作
- Ajax请求三次都不起作用,然后就起作用了
- 防止两个默认功能发生,并同时触发第三个事件
- 弹出循环:添加数据时停止重复/三次应用/X
- 如何让onclick第三次做一些不同的事情
- 在第三次onPageClick事件后,使用twbspagination插件和AJAX更新JS分页
- ajax表单在第二次提交时提交了两次,在第三次提交时又提交了三次,等等
- 使插值双三次函数在ie9中工作
- 只为构造函数的所有实例触发一次事件侦听器
- 如何只调用一次事件处理程序,而不是每次单击项目时调用事件处理程序
- 为什么$scope成员被访问三次
- 在动态创建的元素上触发三次单击事件
- 如何编写用户点击三次就会触发的自定义事件
- 一个事件会触发三次动作
- iPad需要三次触摸JavaScript点击事件