js中append动态生成元素,无法触发popover弹窗事件的解决办法

直接上demo吧:

<div>
    <a href="javascript:;" class="btn btn-sm" style="margin: 20px;background-color: #0b93d5;color: #ffffff" onclick="addRow()"><span class="glyphicon glyphicon-plus" ></span> 添加一行</a>
</div>
<table class="" style="width: 300px;margin: 0 20px;">
    <thead>
    <tr align="center">
        <th>图片</th>
    </tr>
    </thead>
<tbody id="item-list">
    <tr>
        <td style="text-align: left; line-height: 72px;width: 200px">
            <img src="/images/gray.gif" style="height: 60px;width: 60px;">
            <a href="javascript:;" class="finder-select-image">+ 添加图片</a>
        </td>
    </tr>
</tbody>

</script>
// 增加一行
function addRow() {
  var html_str = '<tr><td style="text-align: left; line-height: 72px;width: 200px">' +
                        '<img src="/images/gray.gif" style="height: 60px;width: 60px;">' +
                         '<a href="javascript:;" class="finder-select-image">+ 添加图片</a>' +
                   '</td></tr>';
  var oTr = $(html_str);
  $('#item-list').append(oTr);
  
  //动态生成元素之后,要重新给元素绑定事件(事件委托),否则是无法触发弹窗事件滴
  oTr.find('.finder-select-image').popover({
        html: true, //向弹出框插入 HTML, 如果为 false,jQuery 的 text 方法将被用于向 dom 插入内容
        placement: 'auto right', //定位弹框 'auto right'弹出框将会尽可能显示在右边
        trigger: 'hover', //定义如何触发弹出框
        delay: {hide: 2000}, //隐藏弹出框的毫秒数
        container: 'body', //向指定元素追加弹出框
        title: '图片来源',
        //弹出框的内容
        content: '<div class="btn-group-vertical"><button type="button" class="btn btn-default" onclick="SelectImgFromLocal(this)">本地上传</button><button type="button" class="btn btn-default" onclick="SelectImgFromStorage(this)">图库选择</button></div>',
    });
  
}

//给选择器绑定弹窗事件
$('.finder-select-image').popover({
        html: true, //向弹出框插入 HTML, 如果为 false,jQuery 的 text 方法将被用于向 dom 插入内容
        placement: 'auto right', //定位弹框 'auto right'弹出框将会尽可能显示在右边
        trigger: 'hover', //定义如何触发弹出框
        delay: {hide: 2000}, //隐藏弹出框的毫秒数
        container: 'body', //向指定元素追加弹出框
        title: '图片来源',
        //弹出框的内容
        content: '<div class="btn-group-vertical"><button type="button" class="btn btn-default" onclick="SelectImgFromLocal(this)">本地上传</button><button type="button" class="btn btn-default" onclick="SelectImgFromStorage(this)">图库选择</button></div>',
    });
</script>

页面展示:
在这里插入图片描述
在这里插入图片描述

### 自定义 `el-popover` 组件的弹窗背景颜色或样式 为了自定义 Element UI 中 `el-popover` 组件的弹窗背景颜色或其他样式,可以通过多种方式来实现这一目标。 #### 方法一:使用 `popper-class` 通过给 `<el-popover>` 添加属性 `popper-class="customClass"` 来指定一个额外的 CSS 类名。这样可以在全局样式文件中针对这个类名编写特定的样式规则[^3]: ```css /* 定义自定义样式的CSS */ .customClass { background-color: #f9fafc !important; } ``` 对应的 HTML 结构如下所示: ```html <el-popover placement="top" trigger="click" width="470" popper-class="customClass"> </el-popover> ``` 这种方法允许开发者轻松覆盖默认样式而不需要深入到框架内部结构中去调整。 #### 方法二:处理样式穿透问题 如果遇到样式无法生效的情况(即使已经尝试了上述方法),可能是因为 Vue 的 scoped 样式作用域机制阻止了外部样式影响组件内的元素。此时可以考虑使用 `/deep/`, `::v-deep` 或者 `>>>` 运算符来强制应用样式[^2]: 对于现代浏览器支持较好的项目来说推荐使用 `::v-deep`: ```scss <style lang="scss" scoped> .el-popover { ::v-deep .content-wrapper { /* 假设这是你要修改的部分 */ background-color: red !important; } } </style> ``` 注意这里的 `.content-wrapper` 需要替换为你实际想要改变样式的部分的选择器名称。 #### 方法三:配置 `append-to-body` 当发现某些情况下 `el-popover` 不按预期显示时,比如在全屏模式下消失不见,则可能是由于其被附加到了错误的位置所引起的。这时应该检查并适当设置 `:append-to-body` 属性为 false,从而让 popover 被渲染在其父级容器之内而不是 body 下面[^4]。 ```html <el-popover placement="top-start" title="标题" width="200" trigger="hover" :append-to-body="false" content="这是一段内容..." ></el-popover> ``` 以上三种方案可以根据具体需求灵活组合运用,以达到最佳的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值