小心事件多次绑定

今天同事让我看一个问题,就是jquery中的on事件的回调函数中引用了外部的一个变量a,但是经过一些操作之后在触发事件回调时候a的变量的值总和预期的不一致,好久没写jquery看了半天也没看出来哪里有问题,后来发现原来绑定的这个on语句在操作的时候会不断被执行,意味着添加了好多次的回调函数,而回调触发的时候就会触发n多次。这就意味着如果每次添加on的时候引用的变量a是不同的话,回调函数多次执行时引用的a的值也就是不同的(这次闭包添了乱orz。。)。

所以呢?结论就是绑定事件时最好进行单次绑定,重复绑定时要小心了,看看业务逻辑是否真的需要这么干,当然上面的解决办法也很简单,先解绑元素之前的事件再添加现有的事件即可。

$().off('change').on('change', function(){});