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!');
	});
});

  

posted @ 2014-11-25 16:37  AnyDrew  阅读(747)  评论(0编辑  收藏  举报