<div onclick="test()"></div>
<script>
function test(){
//code
}
</script>

上面这种方法是很low逼的,用了这种方法工资就涨不上去你信不信?下面这种也是...

<div id="test"></div>
<script>
var test = document.getElementById("test");
test.onclick = function(){
//code
};
</script>

能不能用一个稍微有点逼格的方法?

<div id="test"></div>
<script>
var test = document.getElementById("test");
test.addEventListener("click",function(){
//code
});
</script>

addEventListener() 还能解绑

<div id="test"></div>
<script>
var test = document.getElementById("test");
function testFunction(){
//code
}
test.addEventListener("click",testFunction);
test.removeEventListener("click",testFunction);
</script>

听说这个方法对IE8无法向下兼容?没关系,我们还有attachEvent/detachEvent

<div id="test"></div>
<script>
var test = document.getElementById("test");
function testFunction(){
//code
} //绑定
if (test.addEventListener) {
test.addEventListener("click", testFunction);
} else if (test.attachEvent) {
test.attachEvent("onclick", testFunction);
} //解除
if (test.removeEventListener) {
test.removeEventListener("click", testFunction);
} else if (test.detachEvent) {
test.detachEvent("onclick", testFunction);
}
</script>

有一种库叫做jQuery...你可以用bind(),这么写...

<div id="test"></div>
<script>
$("#test").bind("click",function(){
//code
});
$("#test").unbind("click");
</script>

这么写...

<div id="test"></div>
<script>
$("#test").bind("click mousemove",function(){
//code
});
</script>

这么写...

<div id="test"></div>
<script>
$("#test").bind({
"click":function(){
//code
},
"mousemove":function(){
//code
}
});
</script>

还可以用live(),向当前或未来的匹配元素添加一个或多个事件处理器。可以这样写...

<div id="test"></div>
<script>
$("#test").live("click",function(){
//code
});
$("#test").die("click");
</script>

还可以这样写...

<div id="test"></div>
<script>
$("#test").live("click mousemove",function(){
//code
});
</script>

换着姿势写...

<div id="test"></div>
<script>
$("#test").live({
"click":function(){
//code
},
"mousemove":function(){
//code
}
});
</script>

还可以用delegate()   为指定的元素(被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数,适用于当前或未来的元素(比如由脚本创建的新元素)。

<div class="test">
<div id="test_inside"></div>
</div>
<script>
$(".test").delegate("#test_inside","click",function(){
//code
});
</script> <script>
$(".test").delegate("#test_inside","click mousemove",function(){
//code
});
</script> <script>
$(".test").delegate("#test_inside",{
"click":function(){
//code
},
"mousemove":function(){
//code
}
});
</script>

可是人家官网说了...

自从jquery1.7版本以后bind()函数推荐用on()来代替

live()只被jquery1.9版本以下支持,jquery1.9及其以上版本删除了这个方法,jquery1.9以上版本用on()方法来代替。

delegate()倒是一直保留着,可适用于jquery1.4.2及其以上版本,但是名字太丑了。

于是就这样...

<div class="test">
<div id="test_inside"></div>
</div>
<script>
$(".test").on("click", "#test_inside", function () {
//code
});
$(".test").off("click");
</script>

就这样...

<div class="test">
<div id="test_inside"></div>
</div>
<script>
$(".test").on("click mousemove","#test_inside",function(){
//code
});
</script>

就这样...

<div class="test">
<div id="test_inside"></div>
</div>
<script>
$(".test").on({
"click":function(){
//code
},
"mousemove":function(){
//code
}
},"#test_inside");
</script>

就这样被你征服...

注意:on()和delegate()两个参数的位置正好相反...城里人真会玩!Orz~~

补充说明:

bind()函数只能针对已经存在的元素进行事件的设置;但是live(),on(),delegate()均支持未来新添加元素的事件设置

<div class="test"></div>
<script>
//利用bind()方法,给P标签设置click方法 ======失败 没有任何反应=======
$(".test p").bind("click", function () {
alert("bind()添加单击事件成功!");
}); //利用live()方法.给P标签设置click方法 =======成功调用方法============
$(".test p").live("click", function () {
alert("live()添加单击事件成功!");
}); //利用delegate()方法.给P标签设置click方法 =======成功调用方法============
$(".test").delegate("p", "click", function () {
alert("delegate()添加单击事件成功!");
}); //利用on()方法.给P标签设置click方法 =======成功调用方法============
$(".test").on("click", "p", function () {
alert("on()添加单击事件成功!");
});
$(".test").append("<p>test</p>");
</script>

写在结尾

关于版本问题,这个事情不得不说。

bind()支持Jquery所有版本;live()支持jquery1.8-;delegate()支持jquery1.4.2+;on()支持jquery1.7+。

这是个让人纠结的问题,当一个天秤座的强迫症患者面对不同版本的jQuery和不同版本时代的方法的时候,选择成为了一个大问题。

但是如果你去看一看现在主流的js框架的源码你会发现,

怎么这么多on()啊啊啊啊啊啊啊啊

所以,用on()就对了!

其他的方法,封装了半天,最后底层代码还是调用onclick()什么的!

诚然,我也很讨厌废话,

写了那么长,有2/3都是在放屁!

可是总结就是这样,

做笔记就是这样,

来龙去脉要搞清楚,

因为我是一个天秤座的强迫症患者!

Javascript动态绑定的更多相关文章

  1. javascript绑定时间 含(IE)

    script language = "javascript" type = "text/javascript"> function test(){ win ...

  2. 常见的原生javascript DOM操作

    1.创建元素 创建元素:document.createElement() 使用document.createElement()可以创建新元素.这个方法只接受一个参数,即要创建元素的标签名.这个标签名在 ...

  3. js dom 操作技巧

    1.创建元素 创建元素:document.createElement() 使用document.createElement()可以创建新元素.这个方法只接受一个参数,即要创建元素的标签名.这个标签名在 ...

  4. (转)Jquery+Ajax实现Select动态定数据

    解决思路: 在数据库中建立类型字典式表.将下拉框需要添加的项,在数据库表里中文.英文名称对应起来. 下拉框动态绑定数据库表中需要字段. <div id="bgDiv" sty ...

  5. Web_javaScript

    JavaScript 的使用 第1章 JavaScript起源 1.1 起源 N年前 拨号上网,网速很慢,数据提交到服务器端验证,体验很差 于是,就有人在想:能不能让这些数据在浏览器端验证呢? 20世 ...

  6. javascript下动态this与动态绑定实例代码

    this 的值取决于 function 被调用的方式,一共有四种, 如果一个 function 是一个对象的属性,该 funtion 被调用的时候,this 的值是这个对象. 如果 function ...

  7. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  8. Javascript 严格模式详解

    转自http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscript 5添加了第二 ...

  9. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

随机推荐

  1. POJ 2376 (区间问题,贪心)

    题目链接:http://poj.org/problem?id=2376 题目大意:选择一些区间使得能够覆盖1-T中的每一个点,并且区间数最少 题目分析:这道题目很明显可以用贪心法来解决.但题目没有看起 ...

  2. 第八次作业(课堂实战)- 项目UML设计

    本次作业博客 团队信息 队名:起床一起肝活队 原组长: 白晨曦(101) 原组员: 李麒 (123) 陈德斌(104) 何裕捷(214) 黄培鑫(217) 王焕仁(233) 林志华(128) 乐忠豪( ...

  3. 虚拟机中安装 centOS,本地安装 SSH 连接 - 02

    先进入 centOS 中,查询虚拟机的 IP 地址: 双击打开 SSH 可视化客户端: 点击 Connect 需要输入之前那个[无论如何都要使用]的密码. 密码在[centOS - 01]里面设置过, ...

  4. CentOS 6.5 下安装 Redis

    wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ...

  5. EM算法【转】

    混合高斯模型和EM算法 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与K-means一样,给定的训练样本是, ...

  6. 【二】shiro入门 之 身份验证

    大体步骤如下: 1.首先通过new IniSecurityManagerFactory 并指定一个ini 配置文件来创建一个SecurityManager工厂: 2.接着获取SecurityManag ...

  7. 学Python Django学得很迷茫,怎么办?-转自知乎

    本人学生,零编程基础,在学习python的过程中越学越迷茫,感觉像无头苍蝇一样,来知乎取经,下面进入正题吧:        我是先看了中谷的python教学视频,然后跟着慕课网上的python教程把题 ...

  8. QT uic rcc moc 命令行使用

    QT uic rcc moc 命令行使用 PS C:\Users\lsgx> uic.exe --help Usage: C:\Qt\Qt5.5.1\5.5\msvc2012\bin\uic.e ...

  9. [NOI2011]兔兔与蛋蛋游戏 二分图博弈

    题面 题面 题解 通过观察,我们可以发现如下性质: 可以看做是2个人在不断移动空格,只是2个人能移动的边不同 一个位置不会被重复经过 : 根据题目要求,因为是按黑白轮流走,所以不可能重复经过一个点,不 ...

  10. POJ1201 Intervals 【差分约束】

    题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...