jQuery 1.8.3中Dialog调用option方法报错:未初始化无法调用
解决jQuery 1.8.3 Dialog报错:cannot call methods on dialog prior to initialization
这个错误的核心是未初始化Dialog组件就直接调用了dialog('option')方法。jQuery UI的Dialog必须先完成初始化,才能调用其配置修改或打开等方法。
解决办法1:合并初始化与配置(推荐)
直接在初始化Dialog时传入配置参数,之后再调用打开方法,这样不会触发初始化前调用方法的错误:
var authFormDialog = $("#authentication-form"); var role = ['ROLE_SUPERVISOR']; var defer = $.Deferred(); authFormDialog .removeData(AUTH_DATA_KEYS) .data('roles', role) .data('interventionType', interventionType) .data('defer', defer) // 初始化Dialog并设置标题 .dialog({ title: action + ' - SPV', autoOpen: false // 手动控制打开时机,可选 }) .dialog('open');
如果后续需要再次修改配置,只要组件已初始化,就可以安全调用dialog('option')。
解决办法2:先判断初始化状态再操作(适合重复调用场景)
如果这段代码可能被多次执行,先检查Dialog是否已初始化,避免重复初始化同时确保方法调用安全:
var authFormDialog = $("#authentication-form"); var role = ['ROLE_SUPERVISOR']; var defer = $.Deferred(); authFormDialog .removeData(AUTH_DATA_KEYS) .data('roles', role) .data('interventionType', interventionType) .data('defer', defer); // 检查是否已初始化Dialog if (!authFormDialog.data('ui-dialog')) { // 未初始化则执行初始化 authFormDialog.dialog({ autoOpen: false }); } // 现在可以安全修改配置并打开 authFormDialog .dialog('option', 'title', action + ' - SPV') .dialog('open');
额外注意事项
- 务必确认项目中已正确引入jQuery UI的JS和CSS文件,Dialog是jQuery UI的组件,不是原生jQuery自带功能。
- 你的HTML中
#authentication-form设置了display: none是合理的,Dialog组件会自行管理显示状态。
内容的提问来源于stack exchange,提问作者harith
相关产品推荐
相关产品推荐

