1

我在我的应用程序中使用此代码:

document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />";

#inventory_box元素已经存在,所以它只是喷出IMGinto #inventory_box

我想要的是能够点击这个出现IMGid name test,但不会像这样工作:

$("#test").click(function() {
                // Run this
            });
4

5 回答 5

3

尝试这个,

$(document).on('click',"#test",function() {
    alert('test');
});

继续阅读()

于 2013-10-07T11:49:03.150 回答
1

考虑使用 'append' 而不是 innerHTML。混合使用原生 JavaScript 和 jQuery 似乎会导致使用新元素更新 DOM 时出现一些延迟。下面的代码对我有用。

$("#inventory_box").append("<img src='./img/rock.gif' id='test' />")

$('#test').click(function(d){console.log("clicked!");});
于 2013-10-07T12:24:33.317 回答
1

由于图片是动态添加的,所以需要使用event delegation注册事件处理程序

// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#inventory_box').on('click', '#test', function() {
      // Run this
});

这会将您的事件附加到test元素内的图像#inventory_box元素,减少检查整个document元素树的范围并提高效率。

于 2013-10-07T11:49:46.237 回答
0

您对事件处理程序的分配在存在具有此类 id 的元素之前运行,因此在创建元素后,它不会分配任何事件处理程序。

正如建议的那样,解决此常见 javascript 错误的最简单方法是,您可以将事件分配给容器 DOM 元素,并使用 jquery 的事件委托在事件新添加的 DOM 元素上触发事件。

但我宁愿不使用这种方式,理由我不能给你,说,我只是宁愿不使用。

始终在创建元素后分配事件。例如:

document.getElementById("inventory_box").innerHTML = "<img src='./img/rock.gif' id='test' />";

紧接着,执行这个:

$("#test").click(function() {
                // Run this
            });
于 2013-10-07T11:58:44.827 回答
0
$('#inventory_box img').click(function() {
      // Run this
});
于 2013-10-07T12:10:56.680 回答