by agate - Published: 2009-07-16 [5:29 下午] - Category: 日志, 程序编码

天煞的 first 阿, 今天我找一个 bug 半天不得其解. firebug 竟然告诉我 jquery 对象没有 first 这个方法...(请别笑我, 我一直以为有这个方法的.)

教我的一个同事告诉我这个方法. 甚至他给我的一个文档中也有这个方法. 我的天阿, 没想到这个方法竟然是公司加的一个 helper 方法. 我甚至把他用在了我好多 demo code 中. 可怕阿!

这件事教育我 alias 好用. 但是别不懂所以然就去使用.

Tags: [ , ] - Comments: View Comments
by agate - Published: 2009-01-10 [11:20 下午] - Category: 程序编码

一直以来都是简单地使用 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))

这个问题在开发中需要注意!

Tags: [ , ] - Comments: View Comments