关于在vue中拼接html的问题,点击事件无法执行

首先是在普通文档(也就是单个html文件中进行测试,能够正常执行)

普通情况下的结果,拼接的结果能够正常渲染并且控制台有输出;

但是在vue环境之下就会出错,点击事件并没有反应,

js部分:

          for (const i in _sourcesName) {
            let liHtml = "";
            for (const j in _sourcesName[i]) {
              liHtml += '<li  class="dataLi">';
              liHtml +=
                '<p>' +
                _sourcesName[i][j] +
                '(' +
                _sourcesRoundNum[i][j] +
                ')' +
                '</p>';
              liHtml += '<span>最近更新: ' + _sourcesTime[i][j] + '</span>';
              liHtml += '</li>';
            }
            if (i == 0) {
              $("#list0").append(liHtml);
            } else if (i == 1) {
              $("#list1").append(liHtml);
            } else if (i == 2) {
              $("#list2").append(liHtml);
            } else if (i == 3) {
              $("#list3").append(liHtml);
            } else if (i == 4) {
              $("#list4").append(liHtml);
            }
          }

      /**点击li下面的p获取不同表格信息 */
    showList() {
    console.log("1111");
      const _this = this;
      // $(".dataLi p").click(function() {
      //   _this.open3();
      //   console.log("点击获取列表");
     
      // });
      $(".dataLi").on("click","p",function(){
         console.log("点击获取列表");
      });

      // let tabList = $("#tab");
      // tabList.css("display", "block");
      // this.DQZY=
    
    },

template部分

    <ul class="listUl" id="list3"></ul>

  结果是页面可以渲染,但是事件不会成功,能够进入输出“1111”,但是点击事件没有进入,我觉得应该是渲染的时间问题,目前还没有解决。

后期思考:

append中的节点是在整个文档加载完之后开始添加,页面不会为append的元素初始化添加点击事件;

页面并不会为未来的元素初始化添加点击事件,所以使用这种方式动态添加的节点中的点击事件没有生效。

在这里提供两种方法:

1.采用

$(document).on("click", ".dataLi p", function(index,$event)代替
$(".dataLi p").click(function(index,$event)
           $(document).on("click", ".dataLi p", function(index,$event)
                  // $(".dataLi p").click(function(index,$event)
                   {
             this.current=index;
             //获取点击对象
                 var el = event.currentTarget;
                //  alert("当前对象的内容:"+el.innerHTML);
                console.log(el.innerHTML);
                 _this.DQZY =el.innerHTML;
            });

  2.vue自带的@click(v-on:click)是无法实现的,采用js原本的οnclick="showList(event,this)事件

    for (const j in _sourcesName[i]) {
              liHtml += '<li class="dataLi">';
              liHtml +=
                '<p onclick="showList(event,this)">' +
                _sourcesName[i][j] +
                "</p>";
              liHtml +=
                ' <span class="span1">(' +
                _sourcesRoundNum[i][j] +
                ") </span><br>";
              liHtml +=
                '<span class="span2">最近更新: ' +
                _sourcesTime[i][j] +
                "</span>";
              liHtml += "</li>";
            }

      window.showList = function(event, el) {
        console.log("1111");
        console.log(event, el);
        _this.DQZY = el.innerHTML;
      };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue的v-html指令用于将数据动态渲染为HTML代码,并将其插入到指定的DOM元素。要挂载v-html并绑定点击事件,可以按照以下步骤进行操作: 首先,确保你已经安装了Vue,并在页面正确引入了Vue库。 接下来,在Vue实例的data属性定义一个用于存储HTML代码的数据字段,例如htmlCode。 然后,在Vue实例的template模板,找到你想要插入HTML代码的DOM元素,使用v-html指令将htmlCode数据绑定到该DOM元素上。代码如下: ```html <template> <div> <button @click="handleClick">点击</button> <div v-html="htmlCode"></div> </div> </template> ``` 在Vue实例的methods属性,定义一个用于处理点击事件的方法,例如handleClick。在这个方法,你可以使用Vue的更新数据方法,将新的HTML代码赋值给htmlCode字段。例如,使用字符串拼接方式生成新的HTML代码。代码如下: ```javascript <script> export default { data() { return { htmlCode: '' } }, methods: { handleClick() { // 生成新的HTML代码 const newHtmlCode = '<p>我是新的HTML代码</p>'; // 将新的HTML代码赋值给htmlCode字段 this.htmlCode = newHtmlCode; } } } </script> ``` 最后,你可以通过在Vue实例使用@click指令将handleClick方法绑定到按钮的点击事件上,这样当按钮被点击时,handleClick方法会被调用,从而更新htmlCode字段,实现动态渲染HTML代码的效果。 希望以上回答对你有所帮助,如有任何疑问,请随时追问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值