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 ...
随机推荐
- python中RabbitMQ的使用(路由键)
1.简介 当我们希望每个接收端接收各自希望的消息时,我们可以使用路由键,此时交换机的类型为direct. 2.工作原理 每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键. 发送端通过交换机 ...
- Visual Studio references中的package找不到
1. 把solution里面所有project的.net版本设成一样的 2. ERROR: This project references NuGet package(s) that are miss ...
- WebView中JS调用Android Method 遇到的坑整理
WebView是android中常用的一个组件,其作用是展示网页,并让网页和android app进行一些业务逻辑上的交互. 其坑无数,相信用过的都知道,一个一个来解决吧. 1.怎么互调: <! ...
- python之命令行参数解析模块argparse
"""argparse模块使得写用户友好性命令行接口很容易,程序定义所需要的参数,argparse会从ays.argv中提取出这些参数.argparse模块也能自动的产生 ...
- ActiveMQ consumer按顺序处理消息
http://activemq.apache.org/exclusive-consumer.html producer发送消息是有先后顺序的,这种顺序保持到了broker中.如果希望消息按顺序被消费掉 ...
- MySQL数据库安装与配置鸡汤
目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMySQL下载及使用 一.概述 MySQL版本:5.7.17 下载地址:http://rj.baidu.com/soft/ ...
- 使用C#开发数据库应用程序
第一章 用Hello ACCP.NET快速热身(一) 1-1.进入C#世界 a.第一个C#程序 (1)新建项目[项目:project] (2)生成解决方案[生成:build,解决方案:solution ...
- python+ajaxFileUpload 无刷新上传文件
需要准备文件 http://pan.baidu.com/s/1bp4N3nL qqi0 html <script src="{% static 'js/jquery.js' %}& ...
- add()方法和Put()方法的差别
add()和put()方法都是集合框架中的添加元素的方法. 但是put()方法应用于map集合中,add()方法应用于collection集合中. 二者的主要区别是:返回值类型不一样. add()放回 ...
- 如何快速成为一名Linux运维工程师
如今的互联网,绝大多数的网站.服务.游戏均是跑在Linux上面的,虽说Linux发行版众多,只要玩熟了一种发行版,了解了Linux精髓.基本架构.设计原理,其他都是触类旁通的,千万不要在选择哪一发行版 ...