天煞的 first 阿, 今天我找一个 bug 半天不得其解. firebug 竟然告诉我 jquery 对象没有 first 这个方法...(请别笑我, 我一直以为有这个方法的.)
教我的一个同事告诉我这个方法. 甚至他给我的一个文档中也有这个方法. 我的天阿, 没想到这个方法竟然是公司加的一个 helper 方法. 我甚至把他用在了我好多 demo code 中. 可怕阿!
这件事教育我 alias 好用. 但是别不懂所以然就去使用.
天煞的 first 阿, 今天我找一个 bug 半天不得其解. firebug 竟然告诉我 jquery 对象没有 first 这个方法...(请别笑我, 我一直以为有这个方法的.)
教我的一个同事告诉我这个方法. 甚至他给我的一个文档中也有这个方法. 我的天阿, 没想到这个方法竟然是公司加的一个 helper 方法. 我甚至把他用在了我好多 demo code 中. 可怕阿!
这件事教育我 alias 好用. 但是别不懂所以然就去使用.
一直以来都是简单地使用 w3c 的 dom 模式的 javascript 编程模式. 直到最近才开始使用 jquery. 也是由此发现其的强大! 在这里感叹一下: "这东西他妈太好了! 不过开始有依赖性了!!!"
言归正传, 在开发的过程中发现了一个小特点, 需要注意一下: 就是 jquery 的事件绑定机制是累加式的, 说白了就是可以重复注册事件的处理方式, 并在事件触发的时候统统执行. 明显, 这个是有好处的. 我们担心不必在大型前端的 javascript 脚本中覆盖我们原先的事件注册. 但是常常我们也遇到一个事件多次被执行的问题(其实就是某些情况下我们的时间注册了多次.)
在 dom scripting 中我们常常这么注册事件:
HTML:
<p id="clickable">click me!<p>
JAVASCRIPT:
document.getElementById("clickable").onclick = function () { alert(1); };
document.getElementById("clickable").onclick = function () { alert(2); };
测试点击这个段落, 只会有一次 alert 并且内容为 2 (即最后一次注册的);
但是在 jquery 中我们这样:
HTML:
<p id="clickable">click me!<p>
JAVASCRIPT:
$('#clickable').onclick(function () { alert(1); });
$('#clickable').onclick(function () { alert(2); });
测试点击这个段落, 两次 alert 都会出现.
所以如果需要只有一个事件绑定的话可以使用 jquery 自带的 unbind 方法来解除指定时间的所有绑定执行代码. 例如:
$('#clickable').unbind('onclick');
这样就解除了 onclick 的所有绑定方法.
(ps. jquery 中 jqObj.event(function) 相当于 jqObj.bind('event', function))
这个问题在开发中需要注意!