单击时的 JS 选择器不适用于 Django 模型生成的内容
JS selector on click not working for django model generated content
这可能是一个愚蠢的错误,但我有这个代码:
$('#delete-btn').on('click', function(){
return confirm('Are you sure you want to delete this?');
});
警报不会出现,但使用此代码会出现:
$(document).on('click', '#delete-btn', function(){
return confirm('Are you sure you want to delete this?');
});
据我了解,它们是同一回事,但第二个尝试在每次点击页面以查找指定 ID 时处理事件。我试着把它放在文档就绪块中,但这没有帮助。
我不明白为什么一个有效而另一个无效。
如果您引用的元素当时是文档的一部分,您的第一个代码也可以工作,因此请确保将脚本放在文档末尾附近,或者否则将其包装在 ready
处理程序中:
$(function () {
$('#delete-btn').on('click', function(){
return confirm('Are you sure you want to delete this?');
});
});
第二个脚本 ($(document).on('click' ...)
) 有效,因为文档从一开始就存在,所以处理程序绑定到它。单击时,事件冒泡到文档并且处理程序启动。
动态创建的内容
如果您的按钮在页面加载时不在文档中,而是动态生成的,则上述代码可能仍会很快 查找按钮。您提到 django
生成按钮。它可能还会在文档准备就绪时捕获一个事件,然后查询数据库,等待其回复(在大多数情况下这是异步的),然后才添加按钮。如果到那时您的代码已经 运行,它错过了按钮,并且没有将事件处理程序附加到它。
既然如此,使用事件委托到文档层面确实是一个更稳固的方案($(document).on('click' ...)
)。
这可能是一个愚蠢的错误,但我有这个代码:
$('#delete-btn').on('click', function(){
return confirm('Are you sure you want to delete this?');
});
警报不会出现,但使用此代码会出现:
$(document).on('click', '#delete-btn', function(){
return confirm('Are you sure you want to delete this?');
});
据我了解,它们是同一回事,但第二个尝试在每次点击页面以查找指定 ID 时处理事件。我试着把它放在文档就绪块中,但这没有帮助。
我不明白为什么一个有效而另一个无效。
如果您引用的元素当时是文档的一部分,您的第一个代码也可以工作,因此请确保将脚本放在文档末尾附近,或者否则将其包装在 ready
处理程序中:
$(function () {
$('#delete-btn').on('click', function(){
return confirm('Are you sure you want to delete this?');
});
});
第二个脚本 ($(document).on('click' ...)
) 有效,因为文档从一开始就存在,所以处理程序绑定到它。单击时,事件冒泡到文档并且处理程序启动。
动态创建的内容
如果您的按钮在页面加载时不在文档中,而是动态生成的,则上述代码可能仍会很快 查找按钮。您提到 django
生成按钮。它可能还会在文档准备就绪时捕获一个事件,然后查询数据库,等待其回复(在大多数情况下这是异步的),然后才添加按钮。如果到那时您的代码已经 运行,它错过了按钮,并且没有将事件处理程序附加到它。
既然如此,使用事件委托到文档层面确实是一个更稳固的方案($(document).on('click' ...)
)。