jQuery Dialog中open与create事件的区别及弹窗加载图片问题
关于jQuery Dialog的open/create事件区别及图片加载问题解决
先给你理清楚这两个事件的核心差异,再帮你排查代码失效的问题:
一、open与create事件的本质区别
create 事件:
这个事件只会在Dialog第一次被初始化创建完成时触发一次。此时Dialog的DOM结构已经生成,但弹窗本身还处于隐藏状态(没有被显示出来),还没完成可视层面的渲染。open 事件:
每次Dialog被打开(从隐藏变为显示)时都会触发。此时弹窗已经完全渲染到页面上,处于可视状态,所有关联的DOM元素(包括按钮面板)都已经就绪。
二、你的代码没生效的核心原因
大概率是这两个情况之一:
- 按钮面板根本不存在:如果你的Dialog没有配置
buttons选项,jQuery UI不会自动生成.ui-dialog-buttonpane这个元素,自然没法把图片append到一个不存在的节点上。 - 选择器不够稳妥:你用的
jQuery('#ow-logindiv').parent('div').children('.ui-dialog-buttonpane')写法容易出错,在事件回调里直接用this指向当前Dialog元素会更可靠。
三、修正后的代码示例
情况1:Dialog需要按钮面板(已配置buttons)
jQuery("#ow-logindiv").dialog({ // 必须先配置buttons,否则buttonpane不会生成 buttons: [ { text: "确认", click: function() { $(this).dialog("close"); } } ], open: function(event, ui) { // 用this指向当前Dialog元素,精准找到父容器里的按钮面板 $(this).closest('.ui-dialog').find('.ui-dialog-buttonpane').append('<img src="' + image + '" width="150">'); } });
情况2:不需要按钮,只想在弹窗底部加图片
如果不需要按钮面板,直接把图片加到Dialog容器底部即可:
jQuery("#ow-logindiv").dialog({ open: function(event, ui) { // 把图片追加到Dialog容器的底部,可自行调整样式 $(this).closest('.ui-dialog').append('<img src="' + image + '" width="150" style="padding:10px;display:block;margin:0 auto;">'); } });
这样调整后应该就能正常加载图片啦!
内容的提问来源于stack exchange,提问作者pavithraCS




