IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JQuery为动态元素绑定事件 -> 正文阅读

[JavaScript知识库]JQuery为动态元素绑定事件

场景

在前端开发的时候需要一个场景需要为使用AJax动态加载出来的元素绑定一个popup事件,但是发现如果直接在js代码中打开要动态加载的元素的popup的功能无效。

错误复现

原html代码(使用了thymleaf所以javascript的代码内嵌在html里):


<body>
	<div id="comment-container">
		<div th:fragment="commentList">
			<div class="comment" th:each="comment : ${comments}">
				<span th:text="${comment.nickname}" class="popupinfo" data-title="Matt" data-content="hello@gmail.com" th:data-title="${comment.nickname}" th:data-content="${comment.email}">Matt</span>
			</div>
	</div>
<!-- 中间代码... -->
</body>

<script>
    $(function() {
        $("#comment-container").load(/*[[@{/comments/{id}(id=${blog.blog_id})}]]*/"comments/6");
    });
    
    $('.popupinfo').popup({
        on : 'hover'
    })
</script>

错误逻辑

利用ajax请求服务端拿取commentscomment-container里的内容会被.load()替换,其中class="popupInfo"的标签的popup事件被打开,触发条件是hover

错误原因

Javascript中未来存在的元素或者说在静态页面下不存在的元素无法在页面加载的时候就为其绑定属性、事件。这里我们在绑定.popupinfo类元素时,其实它们还不存在,要等异步请求完成并加载到页面上后他们才真正存在,所以这里“并行”的去绑定popup事件根本不会起作用。这里可以参考一篇分析文章:jquery:为动态加载的元素绑定事件

解决方案

我的解决方案

在Ajax的回调函数中为元素打开popup事件,而不是平行于异步Ajax请求

$(function () {
    var url = "/aURL";
    $.ajax({
        url: url,
        contentType: "application/json",
        type: "get",
        data: "",
        success: function f(data) {
            $("#aContainer").html(data);
            // 在动态元素加载完成,在这里为这些元素绑定打开popup事件
            $(".popupinfo").popup({
                on : 'click'
            });
            console.log("成功获取data,并为元素绑定popup()");
        }
    });
});

其他解决方案(未验证,仅供参考)

  1. *jquery:为动态加载的元素绑定事件
  2. jquery在ajax新添加的元素后绑定事件click
  3. *jquery mobile 动态加载页面部分使用popup
  4. jQuery 为动态添加的元素绑定事件
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:38:44  更:2021-07-28 07:41:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 2:42:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码