1

我有一个 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}}}
4

1 回答 1

3

这段代码有几个不同的问题:

  1. 永远不要使用for..in循环来遍历数组。请改用数字for循环。(我假设这data.images是一个数组 using [],而不是一个对象 using {},对吗?看看这个 JSON 数据的例子会很好。)

  2. 您需要var对所有局部变量进行声明。

  3. 它为调用生成的 HTML 代码deladd()在 ID 周围缺少引号。(我假设 ID 是一个字符串而不是一个数字。如果它是一个数字就可以了。)

  4. HTML 代码缺少一些\转义,但我认为这只是问题中的一个错字。

  5. 缩进不一致。

这应该修复这些项目:

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属性可能会更好。但这应该让你现在开始。

于 2013-03-27T17:38:07.973 回答