首页
学习
活动
专区
工具
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. jQuery中append() 动态新增的元素 click 事件无效的解决办法

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

    91620

    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()

    96021

    JQuery_

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

    72510

    【领会要领】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元素一般使用jquery中的remove()和empty() remove()的作用就是从...,dblclick()双击在短时间内发生两次click就是依次双击事件。

    2.2K20

    jq---方法总结

    一:$(document).ready(function(){ // 在这里编写我们希望在DOM准备就绪后执行的代码 jQuery的ready()函数可以重复调用 }); 二:$( 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 元素绑定 一次性事件,点击打印p元素中内容 ² 页面内有两个按钮,点击按钮1, 触发按钮2的 click事件执行 元素中内容 $("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.6K30

    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事件,因为它也是div中的p元素 $("#n1")....click"); /*(追加文本) 触发元素#btn1的[click]事件,额外的函数参数为:undefined, undefined */ 13,load jQuery 1.0 新增该函数,但从1.8

    4.5K90

    JQuery高级

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

    1.5K50

    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.7K30

    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
    领券