JQuery——动态添加元素导致点击事件失效

简介: JQuery——动态添加元素导致点击事件失效

前言

因为博皮当前版本有人反馈文章中标题导航点击无法生成;

jquery-click-invalid: https://codesandbox.io/s/jquery-click-invalid-forked-xpt352

内容

  • 一开始我以为是svg导致的点击事件失效,但是看来下代码结构,发现两者并不关联;
  • 开始觉得问题应该出现在.html()方法上,因为文章这块在博皮上是没做什么调整的,所以直接看博客园的blog-common.min.js;
  • 通过显示目录导航关键字进行搜索,就发现了关键之处,JQuery动态的添加元素,导致事先绑定的click事件失效了,因为.click只适用于静态元素;

?> 既然问题找到了,那修复起来就很快了; 因为我们无法改变blog-commom.min.js,所以通过改变自己博皮代码进行修复;

原来代码

通过.html()进行组合,这样导致button对应的click事件失效;

/**
     * 设置文章标题-iconfont
     */
    (() => {
        let titleInfo = $('#cnblogs_post_body').find(':header');
        if (_.__config.articleContent.emoji && titleInfo.length > 0) {
            // 默认字体图标库
            import(/* webpackChunkName: "fonticon" */ '../../fonts/iconfont');
            titleInfo.html((i, c) => {
                let arr = []
                let num=Math.floor((Math.random()*(160-i))+i);
                if(arr.indexOf(num)==-1){
                    arr.push(num)
                    return '<span><svg class="icon" style="pointer-events: none;"> <use xlink:href="#icon-' + iconfontMap.food[num]+ '"></use></svg></span>' + c;
                }else{
                    i--;
                }
            })
        }
    })();

修复代码

通过.prependTo()进行插入,不修改其他html代码;

/**
     * 设置文章标题-iconfont
     */
    (() => {
        let titleInfo = $('#cnblogs_post_body').find(':header');
        if (_.__config.articleContent.emoji && titleInfo.length > 0) {
            // 默认字体图标库
            import(/* webpackChunkName: "fonticon" */ '../../fonts/iconfont');
            titleInfo.html((i, c) => {
                let arr = []
                let num=Math.floor((Math.random()*(160-i))+i);
                if(arr.indexOf(num)==-1){
                    arr.push(num)
                    $('<svg class="icon"> <use xlink:href="#icon-'+ iconfontMap.food[num] +'"></use></svg>').prependTo(titleInfo[i])
                }else{
                    i--;
                }
            })
        }
    })();

学无止境,谦卑而行.

目录
相关文章
|
2月前
|
JavaScript
jQuery - 添加元素
通过 jQuery,可以很容易地添加新元素/内容。
46 10
|
3月前
|
JavaScript 前端开发
jQuery - 添加元素
jQuery - 添加元素
23 2
|
3月前
|
JavaScript 前端开发
jQuery - 添加元素
jQuery - 添加元素
28 6
|
4月前
|
JavaScript
分别用jquery和js修改页面元素
分别用jquery和js修改页面元素
38 2
|
4月前
|
前端开发 JavaScript
jQuery改变元素的方法
jQuery改变元素的方法
20 1
|
4月前
|
JavaScript Java
分别使用java script和jQuery添加页面元素
分别使用java script和jQuery添加页面元素
33 0
|
6月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
6月前
|
JavaScript 前端开发
我如何使用jQuery动画我的元素
我如何使用jQuery动画我的元素
28 0
|
6月前
|
前端开发 JavaScript
jQuery改变元素
jQuery改变元素
|
JavaScript 前端开发
使用 jQuery对象设置页面中 <ul> 元素的标记类型,并使用 DOM 对象设置 <li> 元素的浮动属性和右边距。使用jQuery 对象和 DOM 对象设置页面元素属性
使用 jQuery对象设置页面中 <ul> 元素的标记类型,并使用 DOM 对象设置 <li> 元素的浮动属性和右边距。使用jQuery 对象和 DOM 对象设置页面元素属性
192 0
使用 jQuery对象设置页面中 <ul> 元素的标记类型,并使用 DOM 对象设置 <li> 元素的浮动属性和右边距。使用jQuery 对象和 DOM 对象设置页面元素属性