ajax动态创建的元素,为什么不能直接获取到想要的元素绑定事件

darlingBaby_wq 2016-09-23 12:51:24
例如:$.ajax({
url:"../json/shop.json",
type:"get",
async:"false",
success:function(data){
//根据data创建所需的ul和li
}
})
以上出来的html为<ul><li>sdsd</li><li>sdsd</li><li>sdsd</li></ul>

然后我想用jq 获取$('ul>li').click(function(){console.log(1)})可是根本就没有效果

但是如果使用$('ul').on('click','li',function(){
console.log(1)
})确可以

这是为什么
...全文
773 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35683066 2016-09-24
  • 打赏
  • 举报
回复
使用事件代理 on( ) 对新添加的子元素也可以进行事件绑定,你可以查一下 bind( ) on( ) deleget( ) live( )--(不建议使用 已废除) 之间的区别
xiaoqiu_net 2016-09-23
  • 打赏
  • 举报
回复
你绑定click事件,这是基于现有的DOM元素,on是绑定,是在你当前DOM元素加载完毕后
  • 打赏
  • 举报
回复
新手学习了
Go 旅城通票 2016-09-23
  • 打赏
  • 举报
回复
$('ul的父元素,就是append那串html代码的容器选择器').on('click','li',function(){ console.log(1) })
  • 打赏
  • 举报
回复
动态创建的html元素需要用jquery的on或者live去绑定元素的事件,否则只能绑定现有的html元素
___紫菜 2016-09-23
  • 打赏
  • 举报
回复
引用 3 楼 MrMicrosoft 的回复:
新手学习了
天际的海浪 2016-09-23
  • 打赏
  • 举报
回复
$('ul>li').click(function(){}) 是直接在现有的li元素上绑定事件。这句代码执行之后再创建的li元素上没有事件。 $('ul').on('click','li',function(){}) 这是委托事件的绑定方式。事件实际是绑定在ul元素上的,当事件触发时会判断事件是否是经过li元素冒泡上来的,是则执行事件代码,不是则不执行。由于li元素上本来就没有绑定事件,所以之后再创建的li元素也可以正常触发。
木头海上漂 2016-09-23
  • 打赏
  • 举报
回复
可以考虑使用on
木头海上漂 2016-09-23
  • 打赏
  • 举报
回复
你这个选择器都没有选中
可以把你创建dom的对象在js中var一下。。然后操作这个变量
天际的海浪 2016-09-23
  • 打赏
  • 举报
回复
引用 楼主 qq_29138197 的回复:
例如:$.ajax({ url:"../json/shop.json", type:"get", async:"false", success:function(data){ //根据data创建所需的ul和li } }) 以上出来的html为<ul><li>sdsd</li><li>sdsd</li><li>sdsd</li></ul> 然后我想用jq 获取$('ul>li').click(function(){console.log(1)})可是根本就没有效果 但是如果使用$('ul').on('click','li',function(){ console.log(1) })确可以 这是为什么
$('ul>li').click(function(){}) 是直接在现有的li元素上绑定事件。这句代码执行之后再创建的li元素上没有事件。 $('ul').on('click','li',function(){}) 这是委托事件的绑定方式。事件实际是绑定在ul元素上的,当事件触发会判断事件是否是经过li元素冒泡上来的,是则执行事件代码,不是则不执行。由于li元素上本来就没有绑定事件,所以之后再创建的li元素也可以正常触发。
第1章 第一个简单的jQuery程序 jQuery事件的链式写法 控制jQuery对象 jQuery控制CSS样式 第2章 使用JavaScript实现隔行变色 使用jQuery选择器实现隔行变色 JavaScript代码检测页面元素 jQuery代码检测页面元素 使用jQuery基本选择器 使用jQuery层次选择器 使用jQuery基本过滤选择器 使用jQuery内容过滤选择器 使用jQuery可见性过滤选择器 使用jQuery属性过滤选择器 使用jQuery子元素过滤选择器 使用jQuery表单对象属性过滤选择器 使用jQuery表单过滤选择器 第3章 DOM树状文档 获取元素的属性 设置元素的属性 设置元素的属性 获取或设置元素的内容 获取或设置元素的值 直接设置元素样式值 增加CSS类别 类别切换 动态创建节点元素 动态插入节点方法 动态插入节点方法 复制元素节点 替换元素节点 包裹元素节点 遍历元素 删除元素 数据管理 第4章 事件中的冒泡现象 bind方法绑定事件 映射方式绑定不同的事件 切换事件hover 切换事件toggle 移除事件unbind 其他事件one 其他事件trigger 文本框中的事件应用 列表框中事件应用 列表中的导航菜单应用 网页选项卡应用 删除记录时的提示效果 第5章 show()与hide()方法 动画效果的show()与hide()方法 toggle()方法 slideDown()与slideUp()方法 slideToggle()方法 fadeIn()和fadeOut()方法 fadeTo()方法 简单的动画 移动位置的动画 队列中的动画 动画停止和延时 动画方式浏览图片 第6章 传统的JavaScript方法实现Ajax功能 load()方法实现Ajax功能 getJSON函数获取数据 getScript函数获取数据 get实现异步获取xml文档数据 $.get发送请求 $.post发送请求 serialize()序列化表单 $.ajax()方法发送请求 第7章 validate验证插件 form表单插件 cookie插件 autocomplete插件 notesforlightbox插件 ContextMenu插件 JQZoom放大镜插件 编写一个对象级别的插件 编写一个类级别的插件 uploadify文件上传插件 第8章 使用draggable插件实现对象的拖曳操作 使用droppable插件实现对象的置放操作 使用sortable插件实现列表中表项的拖曳排序操作 使用accordion插件实现区域块的折叠操作 使用datepicker插件实现选择日期的操作一 使用datepicker插件实现选择日期的操作二 使用tabs插件展示选项卡的基本功能 使用dialog插件弹出提示和确定信息对话框 使用jQuery UI插件以拖动方式管理相册 第9章 使用browser对象获取浏览器信息 使用boxModel对象检测是否是W3C盒子模型 使用$.each()工具函数遍历数组 使用$.each()工具函数遍历ajaxSettings对象 使用$.grep()工具函数筛选数组中的元素 使用$.map()工具函数变更数组中的元素 使用$.inArray()工具函数搜索数组中指定元素的位置 使用$.trim()工具函数除掉字符串的空格符 使用$.isEmptyObject()函数检测对象是否为空 使用$.isPlainObject()函数检测对象是否为原始对象 使用$.contains()函数检测两个节点是否包含 使用$.param()进行数组元素序列化 使用函数$.extend()扩展工具函数 使用函数$.proxy()改变事件函数的作用域 使用jQuery扩展工具函数实现对字符串指定类型的检测< 第10章 在指定的查找范围内获取DOM元素 选择器中含有空格符与不含空格符的区别 事件中的target方法优化冒泡现象 使用data()方法在元素上存取移数据 使用data()方法在元素上存取移JSON格式的数据 解决jQuery库先于其他库导入时变量“$”的使用权 解决jQuery库后于其他库导入时变量“$”的使用权 使用子查询优化选择器性能 减少对DOM元素直接操作 DOM对象与jQuery对象的类型转换 第11章 应用案例-聊天室系统 应用案例_图片切割

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧