【问题标题】:Calling a javascript function with parameters from a dynamically created element使用动态创建的元素中的参数调用 javascript 函数
【发布时间】:2015-02-14 21:14:51
【问题描述】:

我正在尝试使用 PHP 将图片从 MySQL 动态加载到个人资料页面,以及 然后使用 javascript 将它们添加到无序列表中。我希望每个列表项也有 一个like按钮,点击后调用一个javascript函数,将图像名称传递为 它的参数。我已经搜索并找到了有关如何在不传递函数的情况下调用函数的答案 任何变量,但每次我将图像名称添加到函数调用时,控制台日志都会读取 “未定义”。

图片显示正常,imgArray[i] 是一个包含文件名的字符串(例如 photo.jpg) 但是

console.log(imgArray[i]) 

在onclick 函数中读取未定义。我也试过了

like.setAttribute()

没有任何结果。

function showGallery(imgArray) {
    for(var i=0; i < imgArray.length; i++){ 

        var list = document.getElementById("image-list"),
            li   = document.createElement("li"),
            img  = document.createElement("img"),
            like = document.createElement("a");

        img.src = "user_images/" + imgArray[i];
        like.className = "button-like";

        li.appendChild(img);
        li.appendChild(like);
        list.appendChild(li);

        like.href = "javascript:void(0);";
        like.onclick = function() {
            console.log(imgArray[i]);
            addLike(imgArray[i]);
        };
    }
} 

function addLike(img) {
    console.log("Liking..  " + img);
    $.ajax({
       url: 'like.php',
       type: 'POST',
       data: {
           'photo': img
       },
       success: function(likes){
           console.log(likes);
       }  
   });
}

【问题讨论】:

  • 在追加到列表之后移动了onclick函数,因为我读到你不能在元素被添加到DOM之前设置onlick属性。
  • 您正在使用 jQuery 进行 ajax 调用,您应该在任何地方使用它。
  • 为我的无知道歉,但为什么会这样?

标签: javascript onclick parameter-passing href function-call


【解决方案1】:

问题是当点击事件触发时,imgArray[i] 并不存在。

试试这样吧……

like.href = "javascript:void(0);";
like.imgArray = imgArray[i];
like.onclick = function() {
        console.log(this.imgArray);
        addLike(this.imgArray);
    };

希望有帮助

【讨论】:

  • 我还不能 +1 但忘了感谢你的快速回答,Spock!忘记所有关于 javascript 不等待任何东西的仓促风格。
  • 没关系。无论如何,我已经达到了当天允许的最大积分限制;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
相关资源
最近更新 更多