You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

jQuery Dialog中open与create事件的区别及弹窗加载图片问题

关于jQuery Dialog的open/create事件区别及图片加载问题解决

先给你理清楚这两个事件的核心差异,再帮你排查代码失效的问题:

一、open与create事件的本质区别

  • create 事件
    这个事件只会在Dialog第一次被初始化创建完成时触发一次。此时Dialog的DOM结构已经生成,但弹窗本身还处于隐藏状态(没有被显示出来),还没完成可视层面的渲染。

  • open 事件
    每次Dialog被打开(从隐藏变为显示)时都会触发。此时弹窗已经完全渲染到页面上,处于可视状态,所有关联的DOM元素(包括按钮面板)都已经就绪。

二、你的代码没生效的核心原因

大概率是这两个情况之一:

  1. 按钮面板根本不存在:如果你的Dialog没有配置buttons选项,jQuery UI不会自动生成.ui-dialog-buttonpane这个元素,自然没法把图片append到一个不存在的节点上。
  2. 选择器不够稳妥:你用的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

火山引擎 最新活动