JQuery为动态元素绑定事件

news/2024/7/11 0:57:16 标签: 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 为动态添加的元素绑定事件

http://www.niftyadmin.cn/n/1758958.html

相关文章

关于三次握手和四次挥手的面试题

TCP握手挥手的千层套路面试官&#xff0c;不要再问我三次握手和四次挥手

负载均衡器

参考&#xff1a; 【IT老齐011】关于负载均衡器&#xff0c;你学会&#xff08;fei)了吗&#xff1f;什么是负载均衡&#xff1f; 1. 什么是负载均衡 负载均衡建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网…

Java中的序列化及序列化ID

参考转载自&#xff1a; 秒懂Java序列化与反序列化Java的序列化ID的作用 1. 定义 Java的序列化&#xff1a;是指把Java对象转换为字节序列的过程 Java的反序列化&#xff1a;是指把字节序列恢复为Java对象的过程 2. 为什么需要 我们知道&#xff0c;当两个进程进行远程通信…

【CV现状】 - 图像分割

最近在写CV的一个mini project&#xff0c;涉及到Segmentation&#xff08;图像分割&#xff09;&#xff0c;整个project需要使用Matlab&#xff0c;并且总共只有4分&#xff0c;所以完全没有必要动用深度学习。 之前只在Lecture上了解过传统CV解决Segmentation&#xff0c;包…

Leetcode - 回溯算法(Backtracking)解题模板

1. 前言 回溯算法&#xff08;Backtracking&#xff09;的使用场景主要是解决排列组合问题&#xff0c;这类问题的共性就是需要穷举所有的可能/组合&#xff0c;这也意味在不做优化的情况下&#xff0c;需要遍历所有的情况&#xff0c;这也决定了回溯算法无论怎样优化&#xf…

Pacman | MDP | Value Iteration

1. 概要 1.0 前言 最近刚写完AI Reasoning & Decision Making的Coursework&#xff0c;占这门课总成绩的20%。因为不要求写Report&#xff0c;所以在这里单独做一个记录和总结。从CW放出到ddl大概有一个月的时间&#xff0c;工作量不大&#xff0c;难度也较低&#xff0c…

基于Springboot和Mybatis的文件上传与下载

0. 前言 因为太久太久没有碰项目了&#xff08;上一次还是2021年8月开发个人博客的时候&#xff09;&#xff0c;所以这一次打算从头到尾把整个学习和搭建的过程记录下来。 1. 简介 这是一个基于SpringBoot和Mybatis的企业级文件上传下载的实战项目&#xff0c;没有太多前端…

班级管理系统的后端微服务demo项目

Overview 参考&#xff1a; 【编程不良人】微服务小项目实战 班级管理系统&#xff1a; 该项目是学习微服务时的一个demo项目&#xff0c;只具备后端功能&#xff0c;且因为服务的功能和代码极其相似&#xff0c;最后两个服务没有开发完成。文档尽可能事无巨细地记录整个开发过…