tl;dr:在将内容加载到 DOM 之后,jQuery 最早可以访问添加的元素是什么时候?
我正在重构我现有的 JavaScript。目前,我有将内容加载到对话框中的模块,并且在回调中,加载对话框后,负责将事件附加到对话框上的元素。
我不喜欢加载对话框的模块知道加载的对话框元素的详细信息。相反,我现在采用的方法是加载对话框的模块仅执行此操作。
现在附加事件的责任落在对话框本身上。我这样做的方法是在加载到对话框中的内容的标记中嵌入一个 JavaScript 文件,然后调用一个 init 方法来绑定事件。
我现在面临的问题是,由于某种原因,在 init 方法中,jQuery 没有找到脚本正在寻找的元素。几乎就像它们还没有被加载到 DOM 中一样。
如果在对话框加载后,我从控制台手动查找元素,它工作正常。
我的问题是,在进行 AJAX 调用时,jQuery 什么时候可以访问新添加的元素?
您如何看待我在对话框标记中嵌入 JavaScript 的方法?我总是可以有一个回调,加载我的对话框的模块可以用来初始化事件,但我试图在对话框中封装尽可能多的逻辑,以便可以从多个地方加载对话框而不必重复我的启动代码。
是否有更好的方法来附加事件,在将内容添加到 DOM 后执行逻辑?
加载对话框:
loadMemberLoginHistoryDialog: function(memberId) {
var dialogOptions = {
onComplete: function(responseHtml) {}
};
var dialogUrl = '/members/' + memberId + '/loginHistoryDialog';
$.favsDialog(dialogUrl, dialogOptions);
}
在对话框中加载的内容的标记中编写脚本:
<script src="/js/zMemberLoginHistoryDialog.js" type="text/javascript"></script>
<script>
favsManageMemberLoginHistoryDialog.init('@Constants.LanguageCode');
</script>
favsManageMemberLoginHistoryDialog 模块:
var favsManageMemberLoginHistoryDialog = function() {
function initializeControls() {
$(".frmManageMembersMemberDelete")
.submit(function() {
if (confirm("Are you sure?")) {
return true;
}
return false;
});
}
return {
init: function(language) {
languageCode = language;
initializeControls();
}
}; //return
}