js--未来元素
通过动态生成的标签,在生成标签直接绑定事件是无效的。
eg:html标签
<div id="tree">
</div>
<script>
$('#tree .items').on('click', function(e) {
console.log(e);
e.stopPropagation();
if($(e.target).find('ul').is(':visible')) {
$(e.target).find('ul').hide();
} else {
$(e.target).find('ul').show();
}
$(e.target).siblings().find('ul').hide();
});
function creatHtml(data) {
var length = data.length;
var htms = '<ul>'
for(var i = 0; i < length; i++) {
if(data[i].children && data[i].children.length > 0) {
htms += '<li class="items" >' + data[i].name;
htms += creatHtml(data[i].children);
} else {
htms += '<li>' + data[i].name;
}
htms += '</li>';
}
htms += '</ul>';
return htms;
}
$('#tree').html(creatHtml(arr));
$('.items').find('ul').hide();
</script>
以上的事件是没有效果的;
可以通过两种方式改变:
1.把click事件封装在一个方法里,在产生标签后调用。
<script>
function bindItems(){
$('#tree .items').on('click', function(e) {
console.log(e);
e.stopPropagation();
if($(e.target).find('ul').is(':visible')) {
$(e.target).find('ul').hide();
} else {
$(e.target).find('ul').show();
}
$(e.target).siblings().find('ul').hide();
});
}
function creatHtml(data) {
var length = data.length;
var htms = '<ul>'
for(var i = 0; i < length; i++) {
if(data[i].children && data[i].children.length > 0) {
htms += '<li class="items" >' + data[i].name;
htms += creatHtml(data[i].children);
} else {
htms += '<li>' + data[i].name;
}
htms += '</li>';
}
htms += '</ul>';
return htms;
}
$('#tree').html(creatHtml(arr));
//在生成标签的后面调用此方法。
bindItems();
$('.items').find('ul').hide();
</script>
2.on()
//未来元素添加点击事件
$('#tree').on('click', '.items', function(e) {
e.stopPropagation();
if($(e.target).find('ul').is(':visible')) {
$(e.target).find('ul').hide();
} else {
$(e.target).find('ul').show();
}
$(e.target).siblings().find('ul').hide();
});
js--未来元素的更多相关文章
- jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件
很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() ...
- 使用jquery.mCustomScrollbar自定义滚动条(4)live使用,向未来元素添加滚动条,不实用,了解一下
.div_box元素是本来没有的,在滚动条初始化的时候方法是加在$('.content .div_box').mCustomScrollbar()上面,参数live:on; 点击按钮的时候,进行con ...
- jquery添加未来元素时,其绑定事件不起作用解决办法
delegate说起对未来元素是其作用的,于是写下代码: <!DOCTYPE HTML> <html> <head> <meta charset=" ...
- js_实现给未来元素添加事件。
未来元素:不是一个页面上的元素,是通过js或者通过后台直接渲染在页面上的元素,也就是说这些元素不是直接写在document中的. 1.对于未来元素,我们想直接用js或者jq操作它们是不起作用的. $( ...
- jquery 未来元素事件示例 on() delegate() live()
jquery 1.7版后建议使用on() $(document).on("click","#green",function(){$(this).after('& ...
- paip.调试js 查看元素事件以及事件断点
paip.调试js 查看元素事件以及事件断点 ff 26 +firebug 查看不出来.. 360 ,虽然也是chrome 基础,但是开发工具烂阿,也是显示不出来.. 作者Attilax 艾龙, ...
- jQuery 中 on 方法-----给未来元素添加事件
<li class='clear dir-li'> <div class='left title'> 添加到目录:</div> <div class='lef ...
- JS子元素oumouseover触发父元素onmouseout
原文:JS子元素oumouseover触发父元素onmouseout JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父 ...
- 【全面总结】js获取元素位置大小
[js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...
- js获取元素位置和style的兼容性写法
今天说一下js获取元素位置和style的方法.当然不只是element.style那么简单.. 主角:getBoundingClientRect,getClientRects,getComputedS ...
随机推荐
- 快速学习HTML
1.先写基本的框架标签 2.HTML基本标签 段落标签 <p></p> 空格标签 标题标签 <h1></h1>……<h6></h6 ...
- Hadoop介绍-1.基本原理
了解大数据 首先,搞清楚hadoop在处理大数据的定位在哪里 什么是大数据?为什么要处理大数据? 数据量大(Volume) 数据类别复杂(Variety) 数据处理速度快(Velocity) 数据真实 ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Dataguard Snapshot篇
1. 检查当前主备库同步状态 on primary select ads.dest_id,max(sequence#) "Current Sequence", max(log_se ...
- Jmeter4.0----录制脚本
1.前言 Jmeter录制脚本有两种方式.1.通过第三方工具录制比如:Badboy,然后转化为jmeter可用的脚本:2.使用jmeter本身自带的录制脚本功能. 对于测试小白来说可用先使用jmete ...
- Mysql for Linux安装配置之—— 源码安装
1.安装 --假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源码压缩文件1)先安装cmake(mysql5.5以后是通过cmake来编译的) # ta ...
- WebSphere概要文件的创建与删除
一.创建单server服务器 /was/bin/manageprofiles.sh -create -profileName server1 \ -profilePath /was/profiles/ ...
- Oracle 当前日期如何添加指定年数、月数、天数、时数、分钟数、秒数
Oracle 当前时间如何添加指定数,来获取指定的年数.月份或其他的时间日期 --当前时间(2018-10-19 16:51:22)--- select sysdate nowDate from du ...
- js简单验证码的生成和验证
如何用js生成简单验证码,并验证是否正确的方法 1.html页面如下 <div> <table border="0" cellspacing="5&qu ...
- Ubuntu Windows双系统重装windows后看不到ubuntu启动引导
1.下载并安装Easy BCD 2.点击编辑引导菜单,看到只有windows一项 3.点击“添加新条目”,添加引导菜单,选择linux/bsd ,类型选择GRUB 2,然后输入名称,选择Ubuntu所 ...
- 尚学堂java答案解析 第一章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题: 1.C 解析:java为了安全,中并没有引入C语言的指针概念. 2.AD 解析:B:Java先通过ja ...