Js为Dom元素绑定事件须知

为异步加载的Dom 元素绑定事件必须在加载完成之后绑定:

$(‘body‘).load(‘LearnClickBinding.ashx‘);$(‘a‘).click(function () {
	alert(‘I was clicked!‘);
});

上面的绑定是无效的,因为异步加载需要时间,而在获取元素之前,早已执行了$(‘a‘).click();方法,所以绑定失败。

正确的做法是,等待元素加载完后再执行 $(‘a‘).click();

$(‘body‘).load(‘LearnClickBinding.ashx‘, function () {
	$(‘a‘).click(function () {
		alert(‘I was clicked!‘);
	});

});

  

Js为Dom元素绑定事件只能在页面刷新之前,也就是该Dom元素重新加载之前有效。尤其是在异步加载Dom元素的时候,就有这个问题。

$(‘body‘).load(‘LearnClickBinding.ashx‘, function () {
	$(‘a‘).click(function () {
      alert(‘I was clicked!‘);
	});

	$(‘body‘).empty();

	$("<a href=‘#‘>Click Me!</a>").appendTo(‘body‘);
});

这种绑定方式也是失败的,因为绑定事件的a元素已经被empty了,后面append的a元素是没有事件的,所以点击按钮依然没有效果。

正确的绑定方法:

$(‘body‘).load(‘LearnClickBinding.ashx‘, function () {
	$(‘a‘).click(function () {
		alert(‘I was clicked!‘);
	});

	$(‘body‘).empty();

	$("<a href=‘#‘>Click Me!</a>").appendTo(‘body‘);

	$(‘a‘).click(function () {
		alert(‘I was clicked!‘);
	});
});

  

时间: 2024-10-12 07:39:51

Js为Dom元素绑定事件须知的相关文章

【JS 设计模式 】门面模式之DOM元素绑定事件

门面模式的作用:一是简化类的接口,通过用一个接口(函数或方法)来封装复杂的逻辑代码从而客户端可以使用一个接口来调用它:二是消除类与使用它的客户代码之间的耦合,使客户代码和复杂的逻辑代码分离,也就是耦合: ?在何种情况下会使用:1)为一个复杂子系统提供一个简单接口.2)提高子系统的独立性.3)在层次化结构中,使用Facade模式定义系统中每一层的入口,使它们各尽其责. 用绑定事件来举例门面模式,IE浏览器和其它(火狐.谷歌)浏览器在对html元素绑定事件上是有区别的. ie绑定代码: var bu

Chrome插件Visual Event查看Dom元素绑定事件的利器

找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开源 Javascript 书签,能提供绑定在DOM元素上的事件调试信息.Visual Event能显示如下信息: 1.哪一个元素有事件绑定 2.某元素上绑定的事件类型 3.事件触发后运行的代码段 4.定义绑定函数的源文件和行号(仅限于WebKit和Opera浏览器) 除了对调试你自己的代码大有用途,

DOM元素绑定事件的参数说明

当绑定在DOM元素上的事件处理写在标签中时,有两个已知常量,其名称被占用,分别是:event:表示事件对象, this:表示元素本身注意:若调用的脚本方法需要用到这两个对象,必须作为参数传递进来 当绑定在DOM元素上的事件处理未写在标签中时,而是纯粹通过脚本绑定,那么:脚本方法第1个形参:自动表示事件对象, this:自动表示元素本身注意:脚本方法的第1个形参名称无论是写event,还是x,或者a,都表示为Event事件对象,若没有写形参名称,还可通过arguments[0]来获取该Event事

动态生成DOM元素绑定click事件无效问题

在页面里,jq动态生成dom节点,该节点的click事件无效. 如,html里动态添加class名为.del的<a>, js文件中: $('.del').bind('click',fuction(){ alert('sda'); }) 不响应, 网上说可以用live代替bind事件,但在jq1.7版本开始,就取消了live事件, 解决方法: on()事件 代码改为: $(document).on('click','.del',fuction(){ alert('sda'); }) 这样就搞定了

如何用js为动态生成的元素绑定事件

今天在开发项目的时候,需要为用js动态生成的元素绑定一个click事件,但是在页面加载之前,这个元素不存在,没法获取这个元素,然后为其添加事件.查阅jquery api 发现可以用on()事件(注意:新版本的jquery已经把live()去除,现在用on()),为动态生产的元素绑定事件,然后触发该事件执行.比如下面一个例子: 假设我们要给div动态添加的span绑定click事件形成如下结果 x //做法如下: ("#choose_result").on("click&quo

【转载】W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。

原文  http://blog.csdn.net/u011719449/article/details/23787627 在准备阿里前端面试的时候看到这么一道题. 一个DOM元素绑定两个事件,一个冒泡,一个捕获,则事件会执行多少次,执行顺序如何. 这导致了我对冒泡和捕获又进一步深入的了解.(永远都在发现自己知识匮乏的日子中度过人生真是好抓急啊.) 首先冒泡和捕获是怎么一回事. 简单点说.冒泡就是从下往上,像鱼吐泡,泡泡是从下往上升的,也就是DOM元素被触法事件时(此时的dom元素为目标元素),目

一个DOM元素绑定多个事件时,先执行冒泡还是捕获

绑定在被点击元素的事件是按照代码顺序发生,其他元素通过冒泡或者捕获“感知”的事件,按照W3C的标准,先发生捕获事件,后发生冒泡事件.所有事件的顺序是:其他元素捕获阶段事件 -> 本元素代码顺序事件 -> 其他元素冒泡阶段事件 . 一个DOM元素绑定两个事件,一个冒泡,一个捕获,则事件会执行多少次,执行顺序如何. 首先来了解一下冒泡和捕获是怎么回事: 1.冒泡 冒泡是从下向上,DOM元素绑定的事件被触发时,此时该元素为目标元素,目标元素执行后,它的的祖元素绑定的事件会向上顺序执行.如下代码所示,

Angular如何给动态生成的元素绑定事件

在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular.module('myapp',[]) .directive('myText',function(){ return{ restrict:'A', template:'<div ng-click="hello()">Hi everyone</div>', link:

Web API---DOM---为元素绑定事件的引入,为元素绑定多个代码,兼容代码

1. 为元素绑定事件的引入: 用src直接绑定多个,只实现最后一个(programmer2.js) <input type="button" value="按钮" id="btn"/> <script src="common.js"></script> <script src="programmer1.js"></script> <scrip