我有一个for循环,它通过JSON格式返回的数组。这给了我ID&每张图片的名称。然后我有一个包含一些HTML的变量,一些元素由响应动态更新。然后我有一个函数来添加/删除收藏夹sql db中的图像。但是当我将函数添加到锚标记的onclick事件并使用从数据库返回的id时它拒绝运行(即使函数和id现在在html中可见)。用一些代码打开....
for (x in data.images) {
id = data.images[x].id,
name = data.images[x].name,
thumb = data.images[x].thumb
output = '<div>\
<a id="hil" href="viewer.php?id='+id+'">\
<div>\
<img width="160px" height="160px" src="'+thumb+'">\
</div>\
</a>\
<div class="imft">
<a id="deladd" onclick="deladd('+id+')" class="deladd">
<img src="images/png/color_18/hand_thumbsup.png" />
</a>
</div>\
<div>'+name+'</div>\
</div>';
$('#theImages').append(output);
$('#theImagesLoading').html('');
$('#next').html('More');
}
不运行的函数是deladd(),id传递给函数但是onclick事件拒绝工作。如果需要,我可以提供更多代码和/或信息。
感谢您提前提供任何帮助。
Michael Geary的JSON回应:
{"amount":4,"from":0,"limit":4,"images":{"1": {"id":"3084f8d07be00e8af2ab4e7810b2e011","name":"Blossom.jpg","thumb":"thumbnails\/43efd305ac4381b2911d2cbaf212f9e0.jpg","ival":0},"2":{"id":"649d38a79f5980735be80156a83a27ff","name":"Wedding Sunflowe...","thumb":"thumbnails\/01dfca88ce1e699a6ab5d0e5c4adac5e.jpg","ival":1},"3":{"id":"ed2a2ff0c4e9ae319cdd791d8643f9e7","name":"Butterfly.JPG","thumb":"thumbnails\/6adcbf9bdf4b803654b291b2744c8a3b.jpg","ival":2},"4":{"id":"2f5e5540eceb27f9332deeb4cb44ae1c","name":"Creek.jpg","thumb":"thumbnails\/14eafef60824b9c755fc1737e6914ef1.jpg","ival":3}}}
答案 0 :(得分:3)
此代码中存在一些不同的问题:
永远不要使用for..in
循环来遍历数组。请改用数字for
循环。 (我假设data.images
是使用[]
的数组,而不是使用{}
的对象,这是正确的吗?最好看一下这个JSON数据的示例。)< / p>
您需要对所有本地变量进行var
声明。
它为deladd()
调用生成的HTML代码缺少ID周围的引号。 (我假设ID是一个字符串,而不是一个数字。如果它是一个数字就可以了。)
HTML代码缺少一些\
转义符,但我认为这只是问题中的错字。
缩进不一致。
这应该修复这些项目:
for( var i = 0, n = data.images.length; i < n; i++ ) {
var image = data.images[i],
id = image.id,
name = image.name,
thumb = image.thumb;
var output =
'<div>\
<a id="hil" href="viewer.php?id='+id+'">\
<div>\
<img width="160px" height="160px" src="'+thumb+'">\
</div>\
</a>\
<div class="imft">\
<a id="deladd" onclick="deladd(\''+id+'\')" class="deladd">\
<img src="images/png/color_18/hand_thumbsup.png" />\
</a>\
</div>\
<div>'+name+'</div>\
</div>';
$('#theImages').append(output);
$('#theImagesLoading').html('');
$('#next').html('More');
}
此外,使用其他方法添加此事件处理程序而不是onclick
属性可能更好。但这应该让你现在开始。