javascript - 添加 onClick 事件动态 DOM 对象

标签 javascript dom-events

我正在编写基本的气球游戏。气球是动态创建到 Canvas 中的。一切正常,但我无法添加 onclick 事件来隐藏气球。开始游戏的第一个函数是Baslat()。这是我的代码:

var canvas; 
var sev = 1;
var zorluk = 3;
var ctx;

function Baslat() {
    var x;
    for (x = 1; x <= sev*zorluk; x++) {
        BalonYap(x);
    }
}

function seviye(a) {
    sev = a.value;
}

function BalonYap(id) {

    var img = new Image();
    img.src = "balon.png";
    img.id = "balon_"+id;
    img.onload = BalonLoad(img); // works
    img.onclick = Patlat(id); // doesn't work
    
}

function BalonLoad(img) {
    var rnd1 = Math.floor(Math.random() * 750)+10;
    var rnd2 = Math.floor(Math.random() *350)+10;
    canvas = document.getElementById('myCanvas');
    context = canvas.getContext("2d");
    context.drawImage(img, rnd1, rnd2);
}

function Patlat(img) {
    alert();
}

最佳答案

您需要将函数分配给事件处理程序。如果你给一个函数提供参数,它就会被调用。您可以尝试这个工厂方法(您可以向包装函数提供任意参数并在返回函数的闭包中使用它们):

function BalonLoad(img) {
    return function() {
        var rnd1 = Math.floor(Math.random() * 750)+10;
        var rnd2 = Math.floor(Math.random() *350)+10;
        canvas = document.getElementById('myCanvas');
        context = canvas.getContext("2d");
        context.drawImage(img, rnd1, rnd2);
    }
}

关于javascript - 添加 onClick 事件动态 DOM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031538/

相关文章:

javascript - Angular 2 - 将参数传递给服务

javascript - 如何正确地将 Function.apply.bind 应用于 Promise 的解析处理程序 then()?

javascript - 是否有一种规范的方式来为缓慢加载的网页呈现 "loading"弹出窗口?

javascript - scriptaculous draggables : need to cancel onClick action when element is dragged

javascript - 有没有办法判断某个事件是否已在之前的冒泡阶段中得到处理?

javascript - jquery+简单切换脚本+在一个站点上多次使用

javascript - 使用knockoutjs验证输入文本框是否包含非英语字符的自定义规则

javascript - document.getElementsByClassName() 类标识符更改

javascript - 是否可以将滚动事件的上下文设置为 `document.body` 而不是 `window` ?

javascript - 获取所有鼠标点击的 Rx 流的可移植方法