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

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. Leetcode 131

    class Solution { public: vector<vector<string>> partition(string s) { vector<string&g ...

  2. [CodeForces - 197B] B - Limit

    B - Limit You are given two polynomials: P(x) = a0·xn + a1·xn - 1 + ... + an - 1·x + an and Q(x) = b ...

  3. WebView中JS调用Android Method 遇到的坑整理

    WebView是android中常用的一个组件,其作用是展示网页,并让网页和android app进行一些业务逻辑上的交互. 其坑无数,相信用过的都知道,一个一个来解决吧. 1.怎么互调: <! ...

  4. NOIP2015神奇的幻方

    题目描述 幻方是一种很神奇的 N∗N 矩阵:它由数字1,2,3,⋯⋯,N×N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过下方法构建一个幻方: 首先将 1 写在第 ...

  5. linux网络操作 防火墙相关操作

    防火墙状态 查询防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 ...

  6. html 多媒体使用

    HTML插件 辅助应用程序(helper application)是由浏览器启动的程序,辅助应用程序也称为插件. 辅助应用程序可用于播放音频和视频(或其他 ).辅助程序是使用<Object> ...

  7. CCF关于对NOIP2018复赛违规处罚的公告

    NOIP2018复赛于11月10-11日在全国31个赛区同时举行,现已结束.总体有序,但也有赛区出现违规现象.现将复赛中违规情况进行通报. 一.数据提交情况 CCF要求NOI各省组织单位在考试结束后在 ...

  8. Java使用wait() notify()方法操作共享资源

    Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写. 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线 ...

  9. python中list方法总结

    stu=[s1,s2,s3,s4,s5] #list列表/数组 列表的下标/索引是从0开始的: 定义一个列表:XX=[,,,,,] 定义一个空列表:XX=[] or XX=list() #增加一个元素 ...

  10. 今天心情大好,在bluemix部署了一个hell-oworld。

    虽然不是什么很NB的事情. 但是已经开始了. 基于kubernetes容器技术,在kubernetes集群中部署docker镜像hello-world,并正确映射到集群的80端口. 听着老TM复杂了. ...