通过动态生成的标签,在生成标签直接绑定事件是无效的。

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--未来元素的更多相关文章

  1. jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件

    很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() ...

  2. 使用jquery.mCustomScrollbar自定义滚动条(4)live使用,向未来元素添加滚动条,不实用,了解一下

    .div_box元素是本来没有的,在滚动条初始化的时候方法是加在$('.content .div_box').mCustomScrollbar()上面,参数live:on; 点击按钮的时候,进行con ...

  3. jquery添加未来元素时,其绑定事件不起作用解决办法

    delegate说起对未来元素是其作用的,于是写下代码: <!DOCTYPE HTML> <html> <head> <meta charset=" ...

  4. js_实现给未来元素添加事件。

    未来元素:不是一个页面上的元素,是通过js或者通过后台直接渲染在页面上的元素,也就是说这些元素不是直接写在document中的. 1.对于未来元素,我们想直接用js或者jq操作它们是不起作用的. $( ...

  5. jquery 未来元素事件示例 on() delegate() live()

    jquery 1.7版后建议使用on() $(document).on("click","#green",function(){$(this).after('& ...

  6. paip.调试js 查看元素事件以及事件断点

    paip.调试js  查看元素事件以及事件断点 ff 26 +firebug 查看不出来.. 360 ,虽然也是chrome 基础,但是开发工具烂阿,也是显示不出来.. 作者Attilax  艾龙,  ...

  7. jQuery 中 on 方法-----给未来元素添加事件

    <li class='clear dir-li'> <div class='left title'> 添加到目录:</div> <div class='lef ...

  8. JS子元素oumouseover触发父元素onmouseout

    原文:JS子元素oumouseover触发父元素onmouseout JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父 ...

  9. 【全面总结】js获取元素位置大小

    [js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...

  10. js获取元素位置和style的兼容性写法

    今天说一下js获取元素位置和style的方法.当然不只是element.style那么简单.. 主角:getBoundingClientRect,getClientRects,getComputedS ...

随机推荐

  1. CRM BP SEARCH 优化

    出于方便的目的,这边将BU_GROUP,SALE_ORG加到了BP搜索里面,因为CRM项目推广了很多国家,每个国家一个SALE ORG,而标准的BP HEADER ADV SEARCH里竟然没有BU_ ...

  2. WDA基础一:激活相关服务

    一个普通得系统,如果之前没动过相关配置而又想做做WDA程序,是需要激活几个服务的. 1.激活服务 事务码:SICF 默认SERVICE,执行. Service:default_host/sap/opt ...

  3. python爬虫---urllib库的基本用法

    urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块: urllib.request   请求模块 urllib.error   异常处理模块 u ...

  4. Homebrew 备忘

    每次都搜,写篇博客记录以备后续查看. 安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew ...

  5. Nginx基本

    静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端.配置: server { listen ; # 端口号 locati ...

  6. JBoss/WildFly 初步安装配置教程

    1.下载 Redhat的JBoss与Oracle的Weblogic.IBM的WebSphere并称三大JAVA EE中间件. JBoss AS是JBoss的开源版本,JBoss EAP是JBoss的企 ...

  7. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

    Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...

  8. js之单例

    所谓单例,指的是只有一个实例的对象. js通过对象字面量的方式来创建单例对象. var sig = { name:value, method:function(){ } }

  9. Ubuntu中的在文件中查找和替换命令

    分类: 9.Linux技巧2009-09-29 13:40 1429人阅读 评论(0) 收藏 举报 ubuntujdbc 1.查找 find /home/guo/bin -name /*.txt | ...

  10. python文件管理

    文件没有修改操作,修改的方式为打开文件--读取文件--内存中编辑文件--将内容写入文件 打开文件方式 with open('a.txt','w') as f: #操作系统自动关闭文件 f.write( ...