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

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. 函数使用一:采购订单BAPI_PO_CREATE1

    REPORT YTEST01. DATA:GS_POHEADER TYPE BAPIMEPOHEADER, GS_POHEADERX TYPE BAPIMEPOHEADERX, GT_RETURN T ...

  2. Redis开发规范

    1.冷热数据分离,不要将所有数据全部都放到Redis中 虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵.建议根据业务只将高频热数据存储到Redis中[QPS大于5000 ...

  3. Hive QL的实例

    1.创建电影评分表 create table film_table ( userid int, movieid int, rating int, unixtime string ) row forma ...

  4. 二十、MVC的WEB框架(Spring MVC)

    一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...

  5. ElasticSearch安装部署(Windows)

    测试版本:elasticsearch-5.1.1 1.解压elasticsearch-5.1.1.zip. 2.执行elasticsearch.bat启动服务,启动画面如下: 3.访问ElasticS ...

  6. C++中类的静态成员与实例成员的区别

    C++中类的静态成员与实例成员的区别 1.有static修饰的成员变量或成员函数称为静态成员. 2.在内存中,类的静态数据成员占有一块特定的内存空间,被该类的所有实例(对象)共享.而同一个类的不同对象 ...

  7. Java Web(四) 过滤器Filter

    Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出了过滤链的概念.一个FilterChain包括多个Filter. ...

  8. Win10系列:VC++ XML文件解析

    XML文件按照元素标记来存储数据,通过遍历这些元素标记可以得到XML文件中所保存的数据.在C++/CX的类库中并未定义用于解析XML文件的类,但C++提供了能解析XML文件的框架和类库,如msxml4 ...

  9. Unity中Text中首行缩进两个字符和换行的代码

    1.首行缩进两个字符 txt.text=“\u3000\u3000” + str: 2.首行缩进两个字符 将输入法换成全角的,在Text属性面板中添加空格即可. 3.换行    “\n” 补充 Uni ...

  10. 通过滑动条控制Cube旋转

    private float speed = 10; private float speedValue; private GameObject slider; private GameObject cu ...