相关文章推荐
腼腆的柑橘  ·  apache poi - How to ...·  1 年前    · 
深情的扁豆  ·  OpenCV-Python开发指南 - ...·  1 年前    · 

1. 使用 on()方法

本质上使用了事件委派,将事件委派在父元素身上

自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品,但是由于on()方法必须有事件,没有事件时可选择 delegate();

下例为选项卡:

 父元素: .main .left 
 子元素:  li
$("父元素").on("click","子元素",function(){
var index=$(this).index();
$(".main .right").find('li').css({"background":"#F4F4F4","color":"#333"});
$(this).css({"background":"#fff","color":"#46c6ff"});
$(".main .left").find('li').hide();
$(".main .left").find('li').eq(index).show();
});

2. on() 可以获取动态元素,必须有事件

delegate () 可以获取动态元素,可以没事件

live() 可以获取动态元素,jQuery 1.9已弃用,必须有事件

bind() 只能获取静态元素,不能获取动态元素,必须有事件

一、问题描述

用jQuery的append()方法动态添加了一段html代码之后,发现在为新添加的元素绑定click事件时无法获取该新元素。

二、解决方法

度娘推荐的方法基本是用live()方法

live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。

live()的详细使用方法可以查看jQuery live()

live()和bind()的区别就是live不仅可以给页面中现有的元素绑定事件,还可以给将来动态添加进来的元素绑定事件。

于是我用live()替换了bind(),但报出了新错误:TypeError: $(...).live is not a function

经过查询以后发现,原来是jQuery 1.9及其以上已经无法使用live(),可以用on()方法代替live().

on()的官方定义和用法:

on() 方法在被选元素及子元素上添加一个或多个事件处理程序。自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。

注意:使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。

on()的详细使用方法可以查看jQuery on()

三、代码演示

html页面:

原文地址:https://www.cnblogs.com/zhangruiqi/p/7886442.html1. 使用 on()方法       本质上使用了事件委派,将事件委派在父元素身上    自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品,但是由于on()方法必须有事件,没有事件时可选择delegate();   ...
在页面的渲染中,我们经常用遇到 动态 添加 的DOM 元素 ,那么在 获取 这些 元素 的时候或则为这些DOM 元素 的时候,我们有下面三种处理方法: // 1. 在模板引擎里面 添加 行内事件 // 2. 利用事件的委托 获取 (常用) // 3. 在ajax的监听响应完成函数后面 获取 一 在模板引擎里面 添加 行内事件 添加 行内事件就是在标签里面 添加 事件,这样就可以直接 获取 动态 添加 元素 . <!-- 1.准...
当使用 jQuery 的apeend 动态 添加 元素 后,如果页面没有进行刷新,那么使用 JQ 选择器将无法 获取 动态 新增的 元素 动态 获取 元素 的方法 bind(type,[data],fn) 为每个匹配 元素 的特定事件绑定事件处理函数 live(type,[data],fn) 给所有匹配的 元素 附加一个事件处理函数,即使这个 元素 是以后再 添加 进来的 delegate(selector,[type],[data],fn...
本文实例讲述了JS 获取 动态 添加 元素 的方法。分享给大家供大家参考,具体如下: 在页面的渲染中,我们经常用遇到 动态 添加 的DOM 元素 ,那么在 获取 这些 元素 的时候或则为这些DOM 元素 的时候,我们有下面三种处理方法: 1.  在模板引擎里面 添加 行内事件 2.  利用事件的委托 获取 (常用) 3.  在ajax的监听响应完成函数后面 获取 一 在模板引擎里面 添加 行内事件 添加 行内事件就是在标签里面 添加 事件,这样就可以直接 获取 动态 添加 元素 . <!-- 1.准备一个模板 --> [removed] {{ each rows
当我 获取 userNames页面 元素 后去制作显示隐藏的时候,发现隐藏不了 元素 ,怎么都 获取 不到。我这里#top内的所有 元素 都是 动态 渲染的;因为页面已经将JS加载完毕,此时新增请求 动态 添加 节点,自然 获取 不到。在网上查阅资料后发现 动态 添加 的标签要事件委托才能 获取 到节点,也就是说要用:注意: 1.userNames 为 动态 添加 节点的父级节点,请使用非 动态 添加 的父级节点,不然同样 获取 不到。 在中 动态 添加 点击节点: 2. 请委托给直接上级非 动态 添加 节点,不要扩大范围请不要写为:
1. DataTable-columnsDefs通过ajax 动态 生成的 元素 以及值 获取 页面只有table-th,td以及td的属性都是 动态 创建,td第一列是 动态 生成的复选框 var productStorageDynInListTable = loadDataTable({ columnDefs: [{ orderable: false,