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

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. Oracle 11.2.0.4下载地址

    Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_LINUX_1of7.zip?aru=16 ...

  2. python中生成器

    1.简介 通过列表生成式,我们可以直接创建一个列表,但是受到内存的限制,列表容量肯定是有限的. 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢? 在Pytho ...

  3. [luogu P1552] [APIO2012]派遣

    [luogu P1552] [APIO2012]派遣 题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除 ...

  4. 使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模

    from:https://www.jiqizhixin.com/articles/2018-08-11-11 可以通过分析流量包来检测TOR流量.这项分析可以在TOR 节点上进行,也可以在客户端和入口 ...

  5. MySql语句中Union和join的用法

    Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT ...

  6. Kali配置教程

    1.配置软件源 所有操作没有说明,都是以root身份执行. 打开一个终端执行: cat >> /etc/apt/sources.list <<EOF deb http://mi ...

  7. 在Windows系统下搭建ELK日志分析平台

    简介: ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索 ...

  8. ubuntu默认启动方式修改 psensor命令

    Check UUID sudo blkid Then sudo gedit /etc/default/grub & to pull up the boot loader configurati ...

  9. Win10系列:VC++媒体播放

    媒体播放包括视频播放和音频播放,在开发Windows应用商店应用的过程中可以使用MediaElement控件来播放视频文件和音频文件.本节将通过一个具体的示例介绍如何使用MediaElement控件来 ...

  10. learning ddr pagesize calculate

    example: if DDR is 512MB*16*8 COLBITS = 10,  A0-A9 be used for cloumn address. ORG = 16 ,  each bank ...