[英].append() an element, click() not registering
我试图向DOM添加一个元素,然后单击后使用此元素。 但是,我不认为下面的函数注册,因为这是一个自调用函数(位于HTML的末尾),并且仅在乞讨时运行。
(function (){
$('body').append('<span class="test">test</span>');
})
$('.test').click(function(){
console.log(this);
});
})();
click事件处理程序不起作用。
谢谢
由于您动态追加了元素,因此您可以使用on()
或链接click()
事件。
//Using on()
$('body').on('click', '.test', function(){
// Bla
});
//Chaining click()
$('<span class="test">test</span>').click(function(){
// Bla
}).appendTo('body');
或者你可以这样做,
$(function() {
$('body').append('<span class="test">test</span>');
$('.test').click(function() {
console.log(this);
});
});
如果你事先不知道该元素何时被添加到DOM on
那么live
或on
会是更好的选择。
改变这个 -
$('.test').click(function()
{
console.log(this);
});
对此 -
$('.test').live('click', function()
{
console.log(this);
});
实时文档。
编辑
截至jquery 1.7, live
已被弃用。 使用on
,而不是-
$('body').on('click', '.test', function()
{
console.log(this);
});
在文档上。
jsFiddle演示。
请记住,如果要将事件处理程序绑定到动态生成的DOM元素,则需要使用live
(不建议使用)或on
。
在示例代码中,在将span添加到正文后关闭包装函数,如果删除})
行,则代码应该可以正常工作:
(function (){
$('body').append('<span class="test">test</span>');
// }) <- remove this line
$('.test').click(function(){
console.log(this);
});
})();
正如其他人已经回答的那样,你可以链接到jQuery,这样你就可以做任何这些来获得相同的结果:
function someFunction() {
console.log(this);
}
// work from the span and attach a direct handler
$('<span class="test">test</span>').on('click', someFunction).appendTo('body');
// work from the body attaching direct handlers
$('body')
.append('<span class="test">test</span>')
.find('.test')
.on('click', someFunction);
// work from the body attaching a delegate handler
$('body')
.append('<span class="test">test</span>')
.on('click', '.test', someFunction);
您正在关闭附加部分之后的函数,这就是为什么单击处理程序不起作用
$(function() {
$('body').append('<span class="test">test</span>');
$('.test').click(function() {
console.log(this);
});
})();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.