js学习笔记(新手向)

在使用的时候发现一个问题,,,

在重新渲染一个模板后,,用 jquery 给元素绑定的事件处理器不会触发了,,经过调试后发现,,jquery绑定事件的原理可能是给文档元素对象添加属性,,而渲染的时候会删除这个对象,,以模板文件来新建元素,,所以事件处理器并不会重新绑定

在之后想到的解决办法有点搞笑,,每个页面只渲染一次,,每次需要渲染的时候就向服务器请求更改数据,,然后刷新本页面,,就避免了绑定了事件处理器的对象被删除,,

//刷新本页面
var url = window.location.href;

window.location.href = url;        //这个刷新方法虽然笨,,但是有效


后面又想到一个解决办法,,,在模块内创建元素的时候设置事件处理器,,,,就相当于每次渲染就设置事件处理器,,,,也避免了这个问题

//手动设置事件处理器,,虽然麻烦,,但相比上面一个要简单太多
<button class = "btn btn-default next" onclick = "next()">Next</button>


写到这里突然想到,,,,既然jquery的注册事件处理器,,是只注册一次,,,那如果给一个className注册了一个处理器,,,再更改className会不会依然能够触发,,,,


去尝试了一下:

代码如下:

<!DOCTYPE html>
<html>
<head>
	<meta charset = "utf-8"/>
	<script src = "jquery.min.js"></script>
	<script>
		$(window).load(function() {
			$('.next').click(function() {
				console.log($(this)[0].className);
				$(this)[0].className = "last";
			});
		});
	</script>
</head>

<body>
	<button class = "next">next</button>
</body>
</html>


输出的结果:

'next'
'last'
'last'

,,,就是这样,,,,改变一个元素的id或者className只会更改css的样式选择,,,,而不会对事件处理器有影响,,


你可能感兴趣的:(js学习笔记(新手向))