首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

追加元素后,事件click在jquery中的追加元素上不起作用

基础概念

在jQuery中,当你动态地向DOM中添加新的元素时,这些新元素默认情况下不会绑定到已经存在的事件处理器上。这是因为事件处理器通常是在页面加载时绑定到特定的元素上的,而新添加的元素在绑定事件时并不存在。

问题原因

当你使用append或其他类似的方法向DOM中添加新元素时,这些新元素并没有自动绑定到之前定义的事件处理器上。因此,即使你为新元素添加了click事件,这些事件也不会触发。

解决方法

有几种方法可以解决这个问题:

方法一:事件委托(推荐)

事件委托是一种将事件处理器绑定到父元素上,然后通过事件冒泡机制来处理子元素事件的技术。这样,即使子元素是动态添加的,事件处理器也能正常工作。

代码语言:txt
复制
$(document).ready(function() {
    // 绑定事件处理器到父元素上
    $('#parentElement').on('click', '.newElement', function() {
        // 处理新元素的点击事件
        console.log('New element clicked!');
    });

    // 动态添加新元素
    $('#parentElement').append('<div class="newElement">Click me!</div>');
});

在这个例子中,我们将click事件处理器绑定到#parentElement上,并指定只有当点击的元素匹配.newElement选择器时才触发事件处理器。

方法二:重新绑定事件

你可以在每次添加新元素后,重新绑定事件处理器。这种方法虽然简单,但在元素频繁添加的情况下效率较低。

代码语言:txt
复制
$(document).ready(function() {
    // 定义事件处理器
    function handleClick() {
        console.log('New element clicked!');
    }

    // 动态添加新元素并绑定事件处理器
    $('#parentElement').append('<div class="newElement">Click me!</div>');
    $('.newElement').on('click', handleClick);
});

在这个例子中,每次添加新元素后,我们都会重新绑定click事件处理器。

应用场景

事件委托特别适用于以下场景:

  • 动态生成的元素需要绑定事件。
  • 大量元素需要绑定相同事件,减少事件处理器的数量以提高性能。

参考链接

通过上述方法,你可以确保动态添加的元素能够正确响应click事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • python测试开发django-167. jQueryappend() 动态新增元素 click 事件无效解决办法

    前言 使用append新增div元素,绑定click事件无效几种解决办法 遇到问题 绑定select下拉框click事件 // 绑定select下拉框click事件...}) 新增div上点击事件没监听到 主要原因是事件 dom 加载时候就已经完成了,新增 div 元素 click 事件就无效了。...使用live live()函数会给被选元素绑定上一个或者多个事件处理程序,并且规定当这些事件发生时运行函数。 通过live()函数适用于匹配选择器的当前及未来元素。...}) 看到网上很多都是用live方法,但是会报错:TypeError: $(…).live is not a function 主要原因是jquerylive()方法jquery1.9...使用on 接下来还是使用on方法,把点击事件绑定到它父元素上,这样就可以了 // 绑定select下拉框click事件 $('#cards').on('click',

    90220

    jquery动态新增元素节点无法触发事件解决办法

    使用jquery动态新增元素节点时会发现添加事件是无法触发,我们下面就为各位来详细介绍此问题解决办法.   ...),想必后面通过ajax加载进来列表回复按钮,点击事件会失效。   ...其实最简单方法就是直接在标签写onclick="",但是这样写其实是有点low,最好方式还是通过给类名绑定一个click事件。...解决jquery动态新增元素节点无法触发事件问题有两种解决方法,如下: 方法一:使用live   live()函数会给被选元素绑定上一个或者多个事件处理程序,并且规定当这些事件发生时运行函数。...body,实现如下: $("#ulLabel").on('click','.liLabel',function(){ alert('OK') }); 或者: $("body").on('click

    1.7K20

    JQuery

    $(this).html(event) }) }) jquery事件 事件 描述 click() 点击事件 blur() 失去焦点 focus() 获取焦点 mouseover(...=/规则/参数; 事件冒泡 作用: 事件冒泡允许多个被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层不同级别捕获事件。...用法: $(‘ul’).delegete(事件发生在哪,事件属性,匿名函数) 作用: 提高代码执行效率 给未来元素绑定命令(单纯给未来元素绑定命令 $(‘li’).on(事件属性,匿名函数)) DOM...操作(节点操作) DOM: 网页文档根/根标签 追加节点:同级追加和自己追加(前面 后面) 步骤: 声明变量保存节点数据 使用追加函数追加节点 子级追加: append()和appendTo():现存元素内部...,从后面放入元素 prepend()和prependTo():现存元素内部,从前面放入元素 父级追加: after()和insertAfter():现存元素外部,从后面放入元素 before()

    95921

    JQuery_

    $(this).html(event) }) }) jquery事件 事件 描述 click() 点击事件 blur() 失去焦点 focus() 获取焦点 mouseover(...=/规则/参数; 事件冒泡 作用: 事件冒泡允许多个被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层不同级别捕获事件。...操作(节点操作) DOM: 网页文档根/根标签 追加节点:同级追加和自己追加(前面 后面) 步骤: 声明变量保存节点数据 使用追加函数追加节点 子级追加: append()和appendTo():现存元素内部...,从后面放入元素 prepend()和prependTo():现存元素内部,从前面放入元素 父级追加: after()和insertAfter():现存元素外部,从后面放入元素 before()...和insertBefore():现存元素外部,从前面放入元素 删除节点:remove()或empty() $(function(){ // 追加节点:同级追加 和 子级追加

    72210

    【领会要领】web前端-轻量级框架应用(jQuery基础)

    就是说它非常请求,大小30kb左右;具有强大选择器和dom操作封装,可靠事件处理机制,有完善ajax,jquery将所有的ajax操作封装到函数``$.ajax()`;具有丰富插件,完善文档...入口函数如下 window.onload = function(){ // 执行代码 } JavaScript入口函数与jquery入口函数: jquery入口函数是HTML所有标签都加载执行...() 向每个匹配元素内部追加内容 appendTo() 将所有匹配元素追加到另一个指定元素集合 注意:$(A).append(B)操作,不是将B追加到A,而是将A追加到B prepend...注意:$(A).before(B)操作,不是将B插入A前面,而是将A插入B前面 删除HTML元素 删除HTML元素一般使用jqueryremove()和empty() remove()作用就是从...,dblclick()双击短时间内发生两次click就是依次双击事件

    2.1K20

    jq---方法总结

    一:$(document).ready(function(){ // 在这里编写我们希望DOM准备就绪执行代码 jQueryready()函数可以重复调用 }); 二:$( function()...{ // 在这里编写我们希望DOM准备就绪执行代码 } ); 4.jQuery 核心:选取元素 $("#uid"); // 选取id属性为"uid"单个元素 $("p"); // 选取所有的p元素...属性 find("ul") // 返回匹配这些div元素所有后代ul元素jQuery对象 children() // 返回匹配这些ul元素所有子代元素jQuery对象 $("selector...( $B ); // $A内部末尾位置追加$B $A.appendTo( $B ); // 将$A追加到$B内部末尾位置 $A.prepend( $B ); // $A内部开头位置追加$B $...").on( "click", handler ); $("selector").one( "click", handler ); // 用于绑定一次性事件,第一次触发就自动解除绑定 $dblclick

    3K20

    与Ajax同样重要jQuery(2)

    ([expr]) 获取所有兄弟元素 XML 解析 find 方法使用最多 对查找结果进行遍历操作 each(function(){… }) ,each函数可以通过this 获得DOM对象,$(this...($newNode) 内部开始位置追加 l 外部插入: $node.after($newNode) 存在元素后面追加 -- 兄弟 $newNode.insertBefore($node) 存在元素前面追加...删除节点事件会保留 从1.4新API 练习6: ² 分别使用detach和remove 删除带有click事件p标签,删除再将p 重新加入body 查看事件是否存在 <script type="...练习1: ² 为页面内所有p <em>元素</em>绑定 一次性<em>事件</em>,点击打印p<em>元素</em><em>中</em>内容 ² 页面内有两个按钮,点击按钮1, 触发按钮2<em>的</em> <em>click</em><em>事件</em>执行 <script type="text/javascript...p元素内容 $("p").one("click",function(){ alert($(this).text()); }); //页面内有两个按钮,点击按钮1, 触发按钮2 click事件执行 $

    6.2K50

    前端(四)-jQuery

    3.6.1 遍历子元素 方法 说明 children() 获取元素所有子元素 $(selector).children([expr]); 获取子元素指定元素 3.6.2 遍历同辈元素 方法...) 获取当前元素父级元素 parents() 获取当前元素所有祖先元素 3.6.4 each() 遍历 例子 //遍历所有的li元素 //隐式迭代:自动遍历集合所有元素 $("li").each...,不可以直接使用jQuery方法,必须是转化为jQuery节点 alert($(this).html()); //$(this)转换为jQuery节点 }); 3.6.5 end() 结束当前链条最近筛选操作...show() 立刻显示 show(毫秒数) 慢慢显示 show(毫秒数,函数) 动画效果结束执行函数 hide() 立刻隐藏 hide(毫秒数) 慢慢隐藏 hide(毫秒数,函数) 动画效果结束执行函数...,slow,normal,fast; 4.4.2 改变元素透明度(淡入淡出) 方法 说明 fadeIn() 立即淡入 fadeIn(毫秒数) 淡入 fadeln(毫秒数,函数) 动画效果结束执行函数

    8.5K30

    JQuery高级

    jQuery定义变量时候,一般命名用$开头。同事一看就知道是使用了jQuery,然后使用jQuery语法。 其实$是jQuery一个函数。...当在入口函数里面的事件时候,如果有大段代码,一般工作中都是在外面封装一个函数,然后事件中进行调用。...on() ,下面两种用法 ------完全等同delegate ------只找到将来发生事件目标绑定on() 事件委托两个作用:1、提高了代码执行效率2、可以给未来元素绑定命令 通过程序追加标签叫做未来元素...之前click是只能给已有的元素绑定命令,事件委托则是既给已有的绑定命令,又可以给未来元素绑定命令。...// }) // 3、*****$('li').on(字符串形式事件属性, 匿名函数) // 表示只是(没有作用1提高代码执行效率优点)给未来li绑定事件而已

    1.5K50

    JavaScript 学习-37.jQuery 添加删除替换元素

    > 点按钮div下新增一个元素 prepend()在被选元素开头插入内容 $(document).ready(function(){ $("#btn").click(function.../ 添加一个元素 $("#demo").after("追加一段文本"); }); }); div后面添加兄弟元素 before() 在被选元素之前插入内容...}); 总结: replaceAll()和.replaceWith()功能类似,主要是目标和源位置区别 replaceWith()与.replaceAll() 方法会删除与节点相关联所有数据和事件处理程序...replaceWith()方法,和大部分其他jQuery方法一样,返回jQuery对象,所以可以和其他方法链接使用 replaceWith()方法返回jQuery对象引用是替换前节点,而不是通过...replaceWith/replaceAll方法替换节点 删除元素remove()和empty() 删除元素和内容,可使用以下两个 jQuery 方法: empty() - 从被选元素删除子元素

    1.7K30

    4-Jquery学习四-事件操作

    jQuery 1.3 新增该函数,从jQuery 1.7开始被标记为已过时,jQuery 1.9被移除,请使用on()函数来替代。请使用on()函数来替代。 5,die 同上。...应是selector祖辈元素,selector触发事件可以被其祖辈元素事件捕获,从而以"代理"形式触发事件。...同样以初始HTML代码为例,我们可以编写如下jQuery代码: // 为div所有p元素绑定click事件处理程序 // 只有n2、n3可以触发该事件 $("div").on("click", "p...", function(event){ alert( $(this).text() ); }); // 添加n6也可以触发上述click事件,因为它也是divp元素 $("#n1")....click"); /*(追加文本) 触发元素#btn1[click]事件,额外函数参数为:undefined, undefined */ 13,load jQuery 1.0 新增该函数,但从1.8

    4.5K90

    jQuery 快速入门教程

    ready()函数作用相当于window.onload,它用于在当前文档加载准备就绪执行对应函数。...( $B ); // $A内部末尾位置追加$B $A.appendTo( $B ); // 将$A追加到$B内部末尾位置 $A.prepend( $B ); // $A内部开头位置追加$B...,如果用于插入/追加/替换/删除元素是文档元素,则这些元素将从原位置上消失。...// 例如:a标签click事件默认跳转行为;form标签submit事件默认表单提交行为 } // 以下方法均可为所有匹配元素click事件绑定处理函数 $("selector").click..."selector").one( "click", handler ); // 用于绑定一次性事件,第一次触发就自动解除绑定 以上方法均可重复调用,从而为指定click事件绑定多个处理函数。

    13.6K30

    04-老马jQuery教程-DOM节点操作及位置和大小

    ,只不过一个是最后追加子节点,一个是最前面追加子节点(prev vs after) 2.2 追加到appendTo(content)方法 参数:content: 用于被追加内容选择器,String...2.4 插入某个元素之后insertAfter(content)方法 参数: content:插入到每个目标内容,类型可以:String,DOM,jQuery。...这种包装对于文档插入额外结构化标记最有用,而且它不会破坏原始文档语义品质。...这于 .wrap()是不同,.wrap()为每一个匹配元素都包裹一次。这种包装对于文档插入额外结构化标记最有用,而且它不会破坏原始文档语义品质。...Number: 设定CSS 'height' 值,可以是字符串或者数字,还可以是一个函数,返回要设置数值。函数接受两个参数,第一个参数是元素原先集合索引位置,第二个参数为原先高度。

    6.1K00
    领券