v-html渲染给图片添加点击事件

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>

<body>
    <div id="app">
        <!-- v-html渲染 -->
        <div v-html="message" id="message" ref="content" @click="imageEnlargement"></div>
        <!-- 图片弹框 -->
        <el-dialog :visible.sync="dialogVisible">
            <img width="100%" :src="dialogImageUrl" alt="">
        </el-dialog>
    </div>
</body>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                message: `<p>11111</p><div>222</div><img src="./图片/E82UDD)66W4D7$FQ70{N910.jpg" />,<img src="./图片/E82UDD)66W4D7$FQ70{N910.jpg" /><p>333</p>`,
                dialogImageUrl: '',
                dialogVisible: false
            }
        },
        created() {},
        methods: {
            imageEnlargement(e) {
                if (e.target.nodeName == 'IMG') { //判断点击富文本内容为img图片
                    console.log(e.target.currentSrc)

                    this.dialogImageUrl = e.target.currentSrc;
                    this.dialogVisible = true;
                } else {
                    console.log("点击内容不为img")
                }
            },

        },
    })
</script>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用v-html指令渲染HTML代码无法触发事件的问题,通常是由于事件绑定不正确或者事件绑定时机不正确所导致的。具体解决方法可以参考以下几点: 1. 确认事件绑定是否正确:在使用v-html指令渲染HTML代码时,如果需要为HTML元素绑定事件,需要在元素上添加相应的事件绑定代码。例如,为按钮添加点击事件的代码如下: ```html <button v-on:click="handleClick">点击按钮</button> ``` 如果事件绑定代码没有正确添加HTML元素上,那么事件就无法触发。可以通过浏览器的开发者工具查看HTML代码,确认事件绑定是否正确。 2. 确认事件绑定时机是否正确:在使用v-html指令渲染HTML代码时,如果需要为HTML元素绑定事件,需要确保事件绑定时机正确。如果事件绑定代码在HTML元素还未渲染完成时执行,那么事件绑定就会失效。可以在mounted钩子函数中使用this.$nextTick方法确保HTML元素渲染完成后再执行事件绑定代码,例如: ```html <template> <div> <div v-html="htmlContent"></div> </div> </template> <script> export default { data() { return { htmlContent: '<button>点击按钮</button>' }; }, mounted() { this.$nextTick(() => { const btn = document.querySelector('button'); btn.addEventListener('click', () => { alert('点击了按钮'); }); }); } }; </script> ``` 在这个示例中,我们首先使用v-html指令将HTML代码渲染出来,然后在mounted钩子函数中使用this.$nextTick方法确保HTML元素渲染完成后再执行事件绑定代码。在事件处理函数中,我们使用alert方法显示一个提示框,以确认事件是否触发成功。 3. 使用事件委托:在使用v-html指令渲染HTML代码时,如果需要为HTML元素绑定事件,并且HTML代码较为复杂,可以考虑使用事件委托的方式来绑定事件。事件委托的原理是将事件绑定在容器元素上,然后通过事件冒泡机制来判断事件源是哪个子元素,并执行相应的事件处理函数。例如: ```html <template> <div @click="handleClick"> <div v-html="htmlContent"></div> </div> </template> <script> export default { data() { return { htmlContent: '<button>点击按钮</button>' }; }, methods: { handleClick(e) { const target = e.target; if (target.tagName === 'BUTTON') { alert('点击了按钮'); } } } }; </script> ``` 在这个示例中,我们首先在父容器元素上绑定了一个点击事件,并在事件处理函数中判断事件源是哪个子元素。当事件源是button元素时,我们执行alert方法显示一个提示框,以确认事件是否触发成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值