动态更新的功能无法正常工作

时间:2013-03-27 17:22:47

标签: javascript jquery

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

1 个答案:

答案 0 :(得分:3)

此代码中存在一些不同的问题:

  1. 永远不要使用for..in循环来遍历数组。请改用数字for循环。 (我假设data.images是使用[]的数组,而不是使用{}的对象,这是正确的吗?最好看一下这个JSON数据的示例。)< / p>

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

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

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

  5. 缩进不一致。

  6. 这应该修复这些项目:

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