前段时间在做一个任务的时候,碰见了一个问题:zepto无法用on事件去监听新增加的dom事件。这个问题用live可解决, 但是live在ios下失效,为了解决这个问题,我采用了暴力的方法去解决,每次添加dom都绑定一次事件,这样是可以解决问题的,但是这样的方式肯定消耗很多资源,不是一个好的方式,今天在读JavaScript富应用开发这本书时,找到了一个比较完美的解决方法,利用事件委托与自定义事件,封装成一个插件($.fn.xxx)的形式。

  下面就模拟选项卡的形式去解决这个问题

zepto:http://apps.bdimg.com/libs/zepto/1.1.4/zepto.js

html

    <ul id="tabs">
<li data-tab="tab_1" class="tab_1">tab_1</li>
<li data-tab="tab_2" class="tab_2">tab_2</li>
</ul>
<input type="button" name="" value="button" class="button">

这个button是为了动态添加dom

js

    $.fn.tabs = function(){
var element = $(this);
element.delegate("li","click",function(){
var className = $(this).attr("class");
var dataTab = $(this).data("tab");
element.trigger("changes-tabs",[className,dataTab])
});
element.on("changes-tabs",function(e,className,dataTab){
// element.find("li").removeClass("active")
element.find("li").not("."+dataTab).removeClass("active");
element.find("."+className).addClass("active"); });
var firstClassName = element.find("li:first-child").attr("class");
var firstDataTab = element.find("li:first-child").data("tab");
element.trigger("changes-tabs",[firstClassName,firstDataTab]);
}
$("ul#tabs").tabs()
$(".button").on("click",function(){
var html = "<li data-tab='tab_3' class='tab_3'>tab_3</li>";
$("#tabs").append(html);
})

为什么会有一个data-tab这个属性,是因为我需要在点击当前li的时候,移除非当前li的active这个class,并让当前的li加上class

这样就很容易的给新增加的dom添加事件了

css

    .active{
color: red;
}

zepto | 用事件委托去解决无法给新增添的DOM添加事件的问题的更多相关文章

  1. js事件委托篇(附js一般写法和js、jq事件委托写法)

    参考: jQuery代码优化:事件委托篇 使用该技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器被添加在他们的父元素上,事件监听器会分析从子元素上冒泡上来的事件,并找到是哪个子元素事件. ...

  2. 如何给js动态创建的dom添加事件

    delegate() 方法 实例 当点击鼠标时,隐藏或显示 p 元素: $("div").delegate("button","click" ...

  3. ECharts 报表事件联动系列二:柱状图,饼状图添加事件

    代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  4. IE事件模型,如何给IE和非IE浏览器添加事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  5. dom添加事件

    1.语法:document.getElementById('btn').addEventListener 2.可以添加多个EventListener,且不会覆盖 3.移除EventListener, ...

  6. Vue(基础五)_vue中用ref和给dom添加事件的特殊情况

    一.前言 这篇文章涉及的主要内容有: 1.ref绑定在标签上是获取DOM对象 2.ref绑定在子组件上获取的是子组件对象 3.案列:自动获取input焦点 二.主要内容 1.基础内容: ref 被用来 ...

  7. focus、blur事件的事件委托处理(兼容各个流浏览器)

    今天工作中遇到个问题,问题是这样的,一个form表单中有比较多的input标签,因为form中的input标签中的值都需要前端做客户端校验,由于本人比较懒而且特不喜欢用循环给 每个input元素添加b ...

  8. 对JS中事件委托的理解

    什么是事件委托: 事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义:利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. 使 ...

  9. js进阶---12-12、jquery事件委托怎么使用

    js进阶---12-12.jquery事件委托怎么使用 一.总结 一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果. 1.事件委托是什么? 通过事件冒泡,让子元素绑 ...

随机推荐

  1. Linux top详解

    命令 top 参数说明: d:改变显示的更新速度 q:  没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...

  2. Android 获取对象列表中的某一列 / 所有对象的某一字段,Realm数据库可获取某一字段所有值

    现在项目用的数据库是Realm,所以想要获取数据库中某一字段的数据没有一句直接的语句进行获取,就像MySQL一样的select name from User,从User表里获取所有的name. 所以只 ...

  3. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  4. 如何配置 SSH 密钥连接 Git 仓库

    SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:是建立在应用层基础上的安全协议. SSH 是目前较可靠,专为远程登录会话和其 ...

  5. pandas参数设置小技巧

    在日常使用pandas的过程中,由于我们所分析的数据表规模.格式上的差异,使得同样的函数或方法作用在不同数据上的效果存在差异. 而pandas有着自己的一套参数设置系统,可以帮助我们在遇到不同的数据时 ...

  6. HM16.0之帧内模式——xCheckRDCostIntra()函数

    参考:https://blog.csdn.net/nb_vol_1/article/category/6179825/1? 1.源代码: Void TEncCu::xCheckRDCostIntra( ...

  7. 关于H标签 DL DT DD标签的一个小故事

    看了一篇关于SEO论坛的论文,大概故事内容是:一个专业的销售公司,里面SEO  技术多多,可就是销售网站的SEO的情况极为恼火.这天,老板又招到了一个SEO,直接聘为SEO主管全权负责网站的SEO,并 ...

  8. Linux下非root用户运行Tomcat

    PS:Linux下使用非root用户运行tomcat的原因 由于项目需求,也由于root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限. 这意味着你的任何一个页面脚本(htm ...

  9. jQuery源码分析系列(一)初识jQuery

    一个工厂 (function(global, factory){ "use strict" // operation_1 })(typedef window !== "u ...

  10. 水滴app

    在选择了软件工程专业之后,指导教师也让我们参加到了学长学姐的作业之中来,使用学长学姐们的软件并写出自己的使用评价以及自己的一些小评价. 这体验的是第三十二组学长们的软件,他们的队名是自然选择,他们做的 ...