向动态生成的内容添加单击处理程序.如何去做
Adding click handler to a dynamically generated content. How?
我的Json格式如下:
[{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"}]
我也有一个jquery脚本,我在其中添加动态超链接:
$.ajax({
url: './download.php',
type: "POST",
data: {
id: id
},
dataType:'text',
success: function(ans)
{
var data = JSON.parse(ans);
$.each(data, function(i, v) {
$('links').append('<li><a><div>' + v.Text + '<span class="small">' + v.DateTime+ '</span></div></a></li>');
});
}});
我想要一个简单的效果-在我的网页上的超链接列表。当用户点击任何超链接时,他将看到一个警告窗口,其中包含字段id
, Color
, DateTime
和Text
的值。
我尝试在$.each中添加一个函数:
$.find('a').click(function(){
alert(v.Color+v.id+v.Date+v.Text);
})
但是它告诉我:
Uncaught TypeError: $.find(...).click is not a function
那么,我如何将一个函数(点击处理程序)附加到每个生成的链接,将显示与单击链接相关的所有属性?
这里有两个问题:
-
$.find('a')
不工作。你需要首先选择一个dom元素,你将应用选择器(例如$(document).find('a')
)。 - 您正在将
li
s附加到使用$('links')
选择的元素。这也行不通。这个语法选择标记。没有HTML标签<links>
。我猜你实际上要做的是选择id为"链接"的dom元素。要做到这一点,您需要执行$('#links')
。
下面是一个工作代码片段。
var data = [
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"},
{"id":"1","Text":"esj","DateTime":"2015-10-21 19:00:00", "Color":"Red"}
];
$.each(data, function(i, v) {
// Create the li.
var li = $('<li><a href="#"><div>' + v.Text + '<span class="small">' + v.DateTime + '</span></div></a></li>');
// Append it to the dom element with the id "links".
$('#links').append(li);
// Attach the click handler to its <a> child.
var a = li.find('a').on('click', function(e){
e.preventDefault();
alert(v.Color + " " + v.id + " " + v.DateTime + " " + v.Text);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="links"></div>
Try on:
$('#links').on('click', 'a', function() {
alert('message');
});
有几种方法可以做到这一点。
一个是在你添加的每个<li>
上添加一个click
处理程序…
var $li = $('<li><a><div>' + v.Text + '<span class="small">' + v.DateTime+ '</span></div></a></li>');
$('#links').append($li);
$li.click(function(){
alert(v.Color+v.id+v.DateTime+v.Text);
});
http://jsfiddle.net/daveSalomon/t38x715g/另一种方法是将处理程序绑定到links
元素,并将on
与选择器一起使用。你需要跟踪你想要显示的数据-你可以使用$.data
。
$('#links').on('click','a',function(){
var $li = $(this).parents('li');
alert($li.data('Color')+''+$li.data('id')+''+$li.data('DateTime')+''+$li.data('Text'));
});
http://jsfiddle.net/daveSalomon/t38x715g/2/相关文章:
- Javascript在处理函数时防止单击
- 复选框,然后单击事件处理
- jQuery on('单击',..)未处理附加的元素
- 在Node Webkit应用程序中从DOM单击按钮时运行批处理文件
- .on(“单击”,..)不处理使用相同的单击功能创建的对象
- 将参数传递给reactjs单击处理程序
- Jquery处理提交按钮's单击事件而不中断表单发布
- 单击jquery确认按钮后,处理到mvc操作
- 将处理程序附加到“a”标签上的单击事件,即使我不单击也会触发
- 检测单击子节点并发送槽事件处理程序
- 元素单击处理程序由一个神秘的函数取消设置
- GAS 单击事件处理程序导致 UI Web 应用中出现“意外错误”
- 将单击处理程序附加到动态生成的锚标记
- 在处理元素单击事件期间,在循环内部调用window.open()
- 在javascript上创建,以处理单击后要隐藏的几个单选按钮
- jquery on()不是't处理单击事件
- 为什么选择符“:按钮“;不会'无法处理单击事件
- 如何处理单击和焦点事件以切换 .
- Javascript事件委派,处理单击的元素的父级
- 处理单击angularjs指令的包含内容