??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av成人一区二区三区观看在线 ,国产亚洲3p无码一区二区,国产亚洲av片在线观看16女人 http://www.tkk7.com/Hafeyang/category/37209.html前端来源于不断的Ҏ(gu)U篏。我一直在努力?/description>zh-cnWed, 12 Dec 2012 11:12:55 GMTWed, 12 Dec 2012 11:12:55 GMT60knockoutjs中?0l定checkboxhttp://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html衡锋衡锋Wed, 12 Dec 2012 09:14:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.htmlhttp://www.tkk7.com/Hafeyang/comments/392886.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html#Feedback0http://www.tkk7.com/Hafeyang/comments/commentRss/392886.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/392886.html阅读全文

衡锋 2012-12-12 17:14 发表评论
]]>
Zraphaeljs的web囑֮?rgraph2http://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html衡锋衡锋Tue, 11 Dec 2012 12:08:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.htmlhttp://www.tkk7.com/Hafeyang/comments/392832.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html#Feedback0http://www.tkk7.com/Hafeyang/comments/commentRss/392832.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/392832.html阅读全文

衡锋 2012-12-11 20:08 发表评论
]]>
强大的管理web包管理工?bowerhttp://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html衡锋衡锋Tue, 11 Dec 2012 12:01:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.htmlhttp://www.tkk7.com/Hafeyang/comments/392831.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html#Feedback0http://www.tkk7.com/Hafeyang/comments/commentRss/392831.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/392831.html阅读全文

衡锋 2012-12-11 20:01 发表评论
]]>
underscore中的functioncd数解?/title><link>http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Thu, 08 Nov 2012 05:14:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/390932.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/390932.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/390932.html</trackback:ping><description><![CDATA[     摘要: undescore中函数相兛_数解?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/390932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2012-11-08 13:14 <a href="http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nodejs中全局变量&global对象http://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html衡锋衡锋Sat, 27 Oct 2012 14:29:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.htmlhttp://www.tkk7.com/Hafeyang/comments/390332.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html#Feedback0http://www.tkk7.com/Hafeyang/comments/commentRss/390332.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/390332.html阅读全文

衡锋 2012-10-27 22:29 发表评论
]]>
nodejs中export与module.export的区?/title><link>http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sat, 27 Oct 2012 13:35:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/390329.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/390329.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/390329.html</trackback:ping><description><![CDATA[     摘要: 通过一个简单的例子来说明nodejs中exports和module.exports的区别?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/390329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2012-10-27 21:35 <a href="http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sublime text 2 (? 在sublime text 2 中写coffeescripthttp://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html衡锋衡锋Thu, 25 Oct 2012 15:56:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.htmlhttp://www.tkk7.com/Hafeyang/comments/390243.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html#Feedback3http://www.tkk7.com/Hafeyang/comments/commentRss/390243.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/390243.html阅读全文

衡锋 2012-10-25 23:56 发表评论
]]>
兼容AMD,nodejs/commonjs规范的模块定?读knockoutjs源码http://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html衡锋衡锋Sat, 18 Aug 2012 08:51:00 GMThttp://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.htmlhttp://www.tkk7.com/Hafeyang/comments/385734.htmlhttp://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html#Feedback1http://www.tkk7.com/Hafeyang/comments/commentRss/385734.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/385734.html从knockoutjs源码中读C一个很好的能兼容AMD,commonjs规范的模块定义。看代码
/闭包执行一个立卛_义的匿名函数
!function(factory) {

    
//factory是一个函敎ͼ下面的koExports是他的参数

    
// Support three module loading scenarios
    if (typeof require === 'function&& typeof exports === 'object' && typeof module === 'object') {
        
// [1] CommonJS/Node.js
        // [1] 支持在module.exports.abc,或者直接exports.abc
        var target = module['exports'] || exports; // module.exports is for Node.js
        factory(target);
    } 
else if (typeof define === 'function&& define['amd']) {
        
// [2] AMD anonymous module
        // [2] AMD 规范 
        //define(['exports'],function(exports){
           //    exports.abc = function(){}
        //});
        define(['exports'], factory);
    } 
else {
        
// [3] No module loader (plain <script> tag) - put directly in global namespace
        factory(window['ko'] = {});
    }
}(
function(koExports){

    
//ko的全局定义 koExports是undefined 对应着上面的[3] q种情况
    var ko = typeof koExports !== 'undefined' ? koExports : {};

    
//定义一个ko的方?/span>
    ko.abc = function(s){
        alert(s);
    }
});

//[3]中情늚调用
ko.abc("msg");

非常巧妙的闭包实C。三U方式的兼容。摘出来mark一下?br />






衡锋 2012-08-18 16:51 发表评论
]]>
sublime text 2 学习(一)Q快捷键Q小技巧for前端工程师(持箋更新Q?/title><link>http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Thu, 09 Aug 2012 05:22:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/384754.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/384754.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/384754.html</trackback:ping><description><![CDATA[初用sublime text 2Q还不错Q不装Q何插Ӟ能很好的~辑javascript,css,htmlQ很赞。整理一下快捷键Q常用的比如Ctrl+S׃列了Q而且只列举Windows的?br /><br />Ctrl+W 关闭当前늭Q很通用?br />Ctrl+Shift+W关闭所有页{,估计能猜到?br /><br />Ctrl+Shift+v _脓(chung)q且格式化,比较实用?br /><br />Ctrl+[ 减少~进<br />Ctrl+] 增加~进<br /><br />Ctrl+k,Ctrl+u 先按Ctrl+K,再按Ctrl+UQ大写,q有点不习惯<br />Ctrl+k,Ctrl+l 写<br /><br />ctrl+left,ctrl+right 先左/右移动一个单词,VI中的W,B<br /><br />Ctrl+Shift+up ,当前上上UM行,跟Eclipse一?br />Ctrl+Shift+downQ不说了<br /><br />Ctrl+Shift+K 删除当前选中行,后来发现Ctrl+X也可以,Eclipse里面的Ctrl+D?br />Ctrl+Shift+D 复制当前选中行,E序员的挚爱<br />Ctrl+D 是高亮光标所在词Q类似VIM中的#<br /><br />Ctrl+M 到匹配的{[( 与vim 中的%一?br />Ctrl+Shift+M 可以选中{[(内容Q类似vim中的va( vi{<br /><br />Ctrl+J join rows 合ƈ选中?br />Ctrl+Shift+J 打散?br /><br />Ctrl+Shift+T 旋{功能q个标签内容 vim中的vat<br />Ctrl+shift+a 选中匚w的标{?br /><br />Ctrl+T 可以选中多行Q然后讲q些行顺序反转。如果没有选中多行Q会讲光标前后的字母换顺序?br /><br />双击选中一个单?Ctrl+F3跌下一个匹配处QF3上一个匹配处?br /><br />F11Q我最喜欢的全屏快捷键?br />Shift+F11更狠Q只~辑当前的文件。免打扰模式。两x静?br /><br />alt+. 如果输入<div> 然后alt+. 可以自动完成q个tagQ变?lt;div></div><br /><br />Ctrl+/ Ctrl+Shift+/ 注释/取消注释Q各U语a都行?br /><br />一个小技巧:选中一个单词如abc Q然后输? q样 会变?abc",同理q可以用( { [ '<br /><br />Ctrl+shift+P 调出一个功能列表,可以探烦一些好玩的功能Q比如我扑ֈ了这个功能:HTML:Encoding Special Characters。选中 & q行一下可以变?&amp;<br /><br />Ctrl+P 会调Z个对话框框,下拉选项中有当前打开的文Ӟ可以切换Q文本框非常强大Q输入@funcName 可以直接到函数定义处Q输?key 可以直接查找Q输?行数可以直接到某行,也可以用快捷键Ctrl+g<br /><br />安装了ZenCoding之后可以使用的快捷键Q?<a target="_blank">安装教程</a><br /><br />Ctrl+alt+Enter,zencoding开始了<br />alt+shift+W 环绕选中内容<br /><br /><br />官方文档中有快捷键列表:<a >http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html</a><br /><br /><br /><br /><br /><br /><img src ="http://www.tkk7.com/Hafeyang/aggbug/384754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2012-08-09 13:22 <a href="http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈前端lg?/title><link>http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 31 Jul 2012 17:19:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/384477.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/384477.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/384477.html</trackback:ping><description><![CDATA[读过Q了解过很多的前端控件库/lg库,试q,体验q多个失败的Q不失败的lg库之后,ȝ下来Q觉得要构徏一个完整的lg库,需要考虑以下几个斚w的问题:<br /> <br /> 1.基础库:<br /> <br /> 注意是库Q不是框Ӟ基础库通常提供底层Ҏ(gu)Q它必须能够屏蔽览?l端的API差异。也许大家脑子里面会弹出一堆前端热门的一些库。在此不讨论哪个库哪个库怎么P一个基库必L供的功能Q?br /> <ul> <li>基本cd的常见扩展:原生的javascript对象API往往在现实中不够用,比如常见的Array.indexOf/remove/eachQDate.parse/formatQ不是怎么装都需要这cL?/li> <li>DOM操作常见Ҏ(gu)QDOM节点增删Ҏ(gu)QCSS selectorQDOMReadyQcontainsQadd/remove/toggleClassQ屏蔽浏览器之间的操作差异。不多说Qh人都熟?/li> <li>一套浏览器机Ӟ以前大家都們֐于做览器类型和版本的检,现在們֐于做览器的Ҏ(gu)检,q样更有实际用处?/li> <li>Ajax的封装,对于lg库来讲可无。毕竟组件库本n的实C太会用得上Ajax?/li> </ul> <br /> 2.事g机制Q?br /> <br /> addEventListener/removeEventListener/dispatchEvent 是常见的装方式Q不应该只是DOM事gQ而是M对象都可以做一个事件机制?br /> 对于DOM事g的封装需要屏蔽IE/标准Event的差异提供ؓ用户使用Q事件代理非帔R要,不可视?br /> <ul> <li>事g机制都无一例外的是ZW三方观察者或者叫做沙?Sandbox)实现?/li> <li>事g机制更深的功能是提供一个模块的通信机制?/li> <li>对于lg库,lg实例之间的通信更加重要Q组件实例之间最好不要存在相互引用的关系Q互怸能感知对方的存在Q有了事件机Ӟ可以通过W三Ҏ(gu)效的通知lg实例Q减组件实例间的耦合?</li> </ul> <br /> 3.模板机制Q?br /> <br /> 实际上写lg的时候,Dhtml是一件很复杂的事情,模块能够从数据模型,对于lg库来讲通常是配|信息选项。将q些选项D成html字符丌Ӏ但是大家普遍的一个误区是在追求语法的便的和性能。我倒觉得模板要做的事情q不止如此。功能强大的模板不仅仅只完成字符串的拼接Q而是要简化整个DOM操作Q从数据模型到DOM的双向绑定,Model更新了DOM也随之更新。甚臌解决动态DOM事gl定的问题?br /> <br /> <br /> 4.面向对象的机?br /> <br /> 攑֜lg库这个角度去谈面向对象的时候,他是一个架构设计中的一个重要的一环?br /> 面向对象的机制能有效的提升代码的可复用性和扩展性,javascript灉|的语法诸如prototype/closure的方式,能构建出一个强大的cd?br /> 可以使用l承机制扩展已有的组件。也可以用引用的方式装饰(Facade)现有lgQ个人更們֐于用装饰。因为承M不可避免的直接或者间接去讉K父类的一些私有属性方法?br /> q个机制其实军_了一个组件的代码模型Q通常需要解决的问题有:<br /> <ul> <li>该组件承自哪些lg或者基c,或者依赖于那些c?</li> <li>lg实例的管理方式,因ؓ每个lg实例都需要在一个容器中l一存放Q理想的的存放模型应该是树Ş的,在内存中存在cMDOM树一Llg对象树,是否可以通过cd扑ֈ相关实例Q根据ID获取实例Q获取子实例Q父实例Q父/子实例之间的通信父实例的resize是否能通知容器内的实例resize?/li> <li>插g机制Q作Z个非帔R要的扩展机制Q插件能有效的解决组仉的复用部分,通常q部分会叫做行ؓ(behavior)Q对于组件不能提供的甚至是个性化的功能,有没有提供有效的Q够多的扩展点?/li> <li>提供怎样的实例化方式Q?new XXX() ?? q是cMDOM的操作方式appendInstance??甚至有类似jqq种铑ּ。我更觉得应该用appendInstance的方式,q样能更加有效的体现lgCZ间的?子关pR就像DOM操作一P最l组件实例也是树形结构,如果我们直接new XXX() q种方式Q其实相当于声明了一个游L的 DOM节点。实际我写代码的时候发现要理q些lg实例也是比较ȝ的地方,试想一个页面如果有多个lg实例Q需要声明多个实例变量Q或者申明多个对象d放这些实例?/li> <li>lg提供的APIQ一个组件对外暴露的API会包括初始构造方法,公共Ҏ(gu)(method)Q事?event)Q对于eventQ提供怎样的eventData也非帔R要?</li> </ul> <br /> 5.模块化机?br /> <br /> 如今模块化的思想已经深入人心Q模块化带来了很好的团队多h完成一大的Q务的可能性,W合高内聚低耦合的思想。到了如今这个时代,万物皆模块?br /> lg库通常是一个庞大的工程Q单靠个雄主义很隑ց的完整全面?br /> 详细的来Ԍ模块化机制涉及:<br /> <br /> <ul> <li>模块本n的定义,注册Q直接媄响一个组件的代码模型Q一个组件是一个模块?/li> <li>模块的依赖申明以及追朔机Ӟ像前面提到的,依赖于那些类Qcss文gQ资源,数据。不仅仅需要声明,q应该可q朔Q依赖的父类Q也能找到父cLw所依赖的资源,q样为按需部v打包Q在U调试提供居多方ѝ?/li> <li>加蝲机制Q因为在开发阶D要么放一个整个组件库代码Q要么是通过一个加载器按需加蝲Q到了线上希望只部v引用C模块lgQ这样可以减实际部|的文g大小。加载机制会涉及到浏览器的javascript/css文g的加载,其是需要尽可能的ƈ行下载而且按照依赖关系先后执行。包括应用模块,可以方便的通过q种加蝲机制延迟Q按需Q按时的加蝲到页面中?/li> <li>打包部v机制Q由于依赖可q朔Q这样实际项目中用到的那些组件可以分析出来,最l可以根据实际用到的情冉|包出适合大小的组件库Q减冗余包的存在?/li> <li>模块间的通信机制Q由于模块减轻耦合甚至是独自孤立存在,lg之间的通信非帔R要,比如通常一个页面上面的菜单lg实例点击需要触发下面组件的更新。如果直接监听菜单事件去更新下面的组Ӟ也许菜单是每个页面都有。但是下面的lg不是每个面都有Q这L事g监听显然耦合较重Q互怾赖对方的存在。如果菜单点击这是告诉第三方我被点击了。下面的lg只去监听W三方的事gQ这L代码思\明显要好q很多?</li> </ul> 需要再ơ强调的是万物皆模块Q这意味着通用lg本n实现是一个模块,实际应用场景中的业务模块也是模块Q都需要遵守模块的U定?br /> <br /> 6.前端的基本开发思想<br /> <br /> 取决于个人经验:比如MVC的思想在组件实现过E中非常重要QModel通常是构造函C那一堆配|信息,View通常是需要通过Model提供数据用户呈现Q实际上View上的操作的相应都需要Model来记住状态。Controller用于操作二者。原理大安知道Q在开发中怎样分清三者界限。保证思\清晰?br /> <br /> 前端中javascript/css/html的角色也cM与MVC。下面的一些代码方式就有违MVC的一些思想Q?br/> <ul> <li>css Expression:不仅IE onlyQ更重要是CSS中写javascriptq个风格不对Q难以维护?/li> <li>javascript直接修改style.xxx='xx'。能写成css class的最好都写成css class?/li> <li>html中直接写onxxx="foo()"Q没有h能保证fooҎ(gu)存在不被修改?/li> </ul> <br /> 7.其他需要考虑的问题:<br /> <ul> <li>试用例Q通用lg库是一个庞大的工程Q也许牵一发动全nQ不知道哪个API的变动会影响多少调用者,有充的单侧用例Q一定程度上能保证整个组件库的稳定性?/li> <li>_度Q粒度是一个很值得思考的问题Q其实html的标{֏以当做是一个小的组Ӟ只是因ؓ_度很小Q要完成一个复杂的应用Q有很多的可复用lg都需要用到大片大片的重复html片段。另外一个极端,我们我们把整个页面都写成一个组Ӟ昄没有复用性,跟没装一栗所以选择一个合适的lg_度Q一个组件完成特定的功能Q有利于搭徏出有惌力的应用?/li> <li>一致性:需要有很好的代码规范和U定。才能保证API的一致性,用户也会理所当然的想到怎样用APIQ降低学习成本,一个最常见的例子就事g监听的参敎ͼl一?eventObject,eventData)?/li> <li>文档&Demo:q个不用多说Q没有文档和demo的东西没有hȝ代码怎么使用?/li> <li>性能QDOM操作是组件库的性能杀手,高效的DOM操作其重要Q事件监听也是非常耗时的,能采用代理的都用父节Ҏ(gu)代理?/li> <li>资源释放Q组件的资源Q引用是否能完全释放Q尤其是开发SPAQ组件的资源内存释放非帔R要了?</li> </ul> <br /> ȝQ?br /> 雉星星的提Cq么几点Q也是过d作中的体会,当然会有不Q望大家补充Q回头可以check一下现在用到的一些框?lg。欢q讨论? <img src ="http://www.tkk7.com/Hafeyang/aggbug/384477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2012-08-01 01:19 <a href="http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用div模拟出frameset效果http://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.html衡锋衡锋Fri, 17 Jun 2011 04:26:00 GMThttp://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.htmlhttp://www.tkk7.com/Hafeyang/comments/352501.htmlhttp://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.html#Feedback5http://www.tkk7.com/Hafeyang/comments/commentRss/352501.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/352501.html阅读全文

衡锋 2011-06-17 12:26 发表评论
]]>
使用正则替换textareaU的重复?/title><link>http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Fri, 17 Jun 2011 04:16:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/352500.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/352500.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/352500.html</trackback:ping><description><![CDATA[     摘要: 使用正则表达式去除textarea中的重复?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/352500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2011-06-17 12:16 <a href="http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>textarea高度自动增加http://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html衡锋衡锋Sun, 15 May 2011 11:40:00 GMThttp://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.htmlhttp://www.tkk7.com/Hafeyang/comments/350286.htmlhttp://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html#Feedback1http://www.tkk7.com/Hafeyang/comments/commentRss/350286.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/350286.html 最初看到这个命题,觉得不是不是直接监听事g然后设计高度么?于是我想当然的写了这么一D代码:

<script type="text/javascript">
function autoheight(){
this.height= this.scrollHeight+this.height+"px";
}

</script>
<textarea id="" rows="" cols="" onpropertychange="autoheight();" oninput="autoheight()" style="overflow:hidden;"></textarea>

q个代码我没有运行,因ؓ一边写发C对劲Q在propertychange函数中改变property会再ơ触发propertychange事gQ结果就可想而知了。stack overflow?/p>

所以需要换一U思\Q新Z个textareaQ将同样大的文本攑ֈ属性一Ltextarea中计其高度Q然后把高度讄到目标textarea中?/p>

<script type="text/javascript">

    
//基本函数*2
    var addHandler = window.addEventListener?
    
function(elem,event,handler){elem.addEventListener(event,handler);}:
    
function(elem,event,handler){elem.attachEvent("on"+event,handler);};

    
var $ = function(id){return document.getElementById(id);}

        
    
function autoTextArea(elemid){
        
//新徏一个textarea用户计算高度
        if(!$("_textareacopy")){
            
var t = document.createElement("textarea");
            t.id
="_textareacopy";
            t.style.position
="absolute";
            t.style.left
="-9999px";
            document.body.appendChild(t);
        }
        
function change(){
            $(
"_textareacopy").value= $(elemid).value;
            $(elemid).style.height
= $("_textareacopy").scrollHeight+$("_textareacopy").style.height+"px";
        }
        addHandler($(
"target"),"propertychange",change);//for IE
        addHandler($("target"),"input",change);// for !IE
        $(elemid).style.overflow="hidden";//一处隐藏,必须的?/span>
        $(elemid).style.resize="none";//Ltextarea能拖拽放?~小高度/宽度功能
    }

    addHandler(window,
"load",function(){
        autoTextArea(
"target");
    });
</script>
<textarea id="target" rows="" cols=""></textarea>

搞清楚原理其实就单多了。要捕捉textarea的change事g在IE下可以用propertychange,?IE下可以用input?/p>

一些textarea资料做参考:

  1. textarea 的一些小技?http://css-tricks.com/textarea-tricks/
  2. 本文的直接资料来源:http://www.planeart.cn/?p=1489

 

 



衡锋 2011-05-15 19:40 发表评论
]]>
jQuery中的stopImmediatePropagation与stopPropagation的区?/title><link>http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Fri, 06 May 2011 10:04:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/349697.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/349697.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/349697.html</trackback:ping><description><![CDATA[有这么个需求。要在一个文本框上监听两个事Ӟ例如: <div> </div> <div> <div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">script </span><span style="color: rgb(255, 0, 0);">type</span><span style="color: rgb(0, 0, 255);">="text/javascript"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br />         $(</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">function</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">(){<br />             $(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">#t</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">).keyup(</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">function</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">(e){<br />                 $(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">#s</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">).html(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">keyup1</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">);<br />                 </span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">//</span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">stopImmediatePropagation可以L在这之后l定的事?/span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);"><br /> </span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">                </span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">//</span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">比较注释和不注释q一行的区别</span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);"><br /> </span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">                e.stopImmediatePropagation();<br />             });<br />             $(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">#t</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">).keyup(</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">function</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">(e){<br />                 $(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">#s</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">).html(</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">keyup2</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">);<br />             });<br />         });<br />     </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">input </span><span style="color: rgb(255, 0, 0);">type</span><span style="color: rgb(0, 0, 255);">="text"</span><span style="color: rgb(255, 0, 0);"> id</span><span style="color: rgb(0, 0, 255);">="t"</span><span style="color: rgb(255, 0, 0);"> name</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> value</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/></span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">span </span><span style="color: rgb(255, 0, 0);">class</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> id</span><span style="color: rgb(0, 0, 255);">="s"</span><span style="color: rgb(0, 0, 255);">></</span><span style="color: rgb(128, 0, 0);">span</span><span style="color: rgb(0, 0, 255);">></span></div> </div> <div> </div> <div>如果在第一个事件中需要阻止第二个事g的执行可以在W一个事件中使用event.stopImmediatePropagationҎ(gu)。jQuery的event的对象是增强的event对象Q?br /> stopImmediatePropagation是jQuery独有的一U阻止jQueryl定事g机制。可以通过<span style="font: 16px/normal Simsun; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; border-collapse: separate; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="Apple-style-span"><span style="color: rgb(34, 34, 34); line-height: 20px; font-family: monospace; font-size: 13px;" class="Apple-style-span"><a style="border-width: 0px; margin: 0px; padding: 0px; color: rgb(15, 103, 161); font-size: 13px; text-decoration: underline; vertical-align: baseline; outline-width: 0px; background-color: transparent;" >isImmediatePropagationStopped()</a></span></span>来判断是否阻止了jQuery立即冒?/div> <div> </div> <div>stopImmediatePropagation的实现可以参见我之前的一文章,<a href="http://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html">从jQuery的缓存到事g监听</a> 在这文章中提到jQuery事仉~存在一个数l中按照先后序执行。如果stopImmediatePropagation停止执行数l中的监听函数?/div> <div> </div> <div>stopPropagation是阻止默认事件监听函数。不是jQuery独有Q阻止默认事件的冒Q比如监听了DOM节点和该节点的父节点的事Ӟ默认是事件执行将从里到外Q这是所谓的冒。在IE9-览器中可以使用event.cancelBubble=false来做刎ͼ标准览器用event.stopPropagationҎ(gu)。jQuery也把stopPropagation扩展方式到IE上这h了一致的Ҏ(gu)?/div> <div> </div> <div>lg所qͼ其实stopImmediatePropagation与stopPropagation׃是一个东西,所以也不存在什么区别了?/div> <div> <div>参考资?/div> <div>http://api.jquery.com/event.stopImmediatePropagation/ <div> <div>http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation</div> </div> </div> </div> <div>http://api.jquery.com/event.stopImmediatePropagation/ </div> <div>http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation</div> <div> </div> <img src ="http://www.tkk7.com/Hafeyang/aggbug/349697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2011-05-06 18:04 <a href="http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery中的delegate与live实现方式?/title><link>http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 19 Apr 2011 04:07:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/348563.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/348563.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/348563.html</trackback:ping><description><![CDATA[     摘要: 单的分析jQuery中delegate和liveҎ(gu)的实现原理?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/348563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2011-04-19 12:07 <a href="http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>datagrid性能Q一Q:性能问题何来Q?/title><link>http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 18 Jan 2011 02:25:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/343131.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/343131.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/343131.html</trackback:ping><description><![CDATA[     摘要: 在grid中放大数据量时的性能问题分析?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/343131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2011-01-18 10:25 <a href="http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript解析q铺树Ş数据http://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html衡锋衡锋Thu, 13 Jan 2011 08:40:00 GMThttp://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.htmlhttp://www.tkk7.com/Hafeyang/comments/342937.htmlhttp://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html#Feedback1http://www.tkk7.com/Hafeyang/comments/commentRss/342937.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/342937.html阅读全文

衡锋 2011-01-13 16:40 发表评论
]]>
从jQuery的缓存到事g监听http://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html衡锋衡锋Tue, 04 Jan 2011 07:20:00 GMThttp://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.htmlhttp://www.tkk7.com/Hafeyang/comments/342286.htmlhttp://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html#Feedback5http://www.tkk7.com/Hafeyang/comments/commentRss/342286.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/342286.html阅读全文

衡锋 2011-01-04 15:20 发表评论
]]>
怎样高效的批量删除javascript 数组中的元素Q?/title><link>http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Wed, 29 Dec 2010 07:58:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/341917.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/341917.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/341917.html</trackback:ping><description><![CDATA[     摘要: 本文探讨怎样扚w删除javascript数组中的元素?nbsp; <a href='http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html'>阅读全文</a><img src ="http://www.tkk7.com/Hafeyang/aggbug/341917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2010-12-29 15:58 <a href="http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iframe的readyStatehttp://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html衡锋衡锋Sun, 12 Dec 2010 08:34:00 GMThttp://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.htmlhttp://www.tkk7.com/Hafeyang/comments/340397.htmlhttp://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html#Feedback1http://www.tkk7.com/Hafeyang/comments/commentRss/340397.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/340397.html阅读全文

衡锋 2010-12-12 16:34 发表评论
]]>
javascript == === 陷阱&不解http://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html衡锋衡锋Fri, 29 Oct 2010 09:32:00 GMThttp://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.htmlhttp://www.tkk7.com/Hafeyang/comments/336504.htmlhttp://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html#Feedback1http://www.tkk7.com/Hafeyang/comments/commentRss/336504.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/336504.html
        alert(
0=="");//true
        alert(0=="0");//true
        alert(0==="0");//false
        alert(null==0);//false
        alert(undefined==null);//true
        alert(undefined === null);//false
        alert("true==\"true\":"+(true=="true"));//false
        alert("false==\"false\":"+(false=="false"));//false

NaN有点特例Q?br />
        alert(NaN==NaN);//false
        alert(NaN==undefined);//false
        alert(NaN==null);//false



Ҏ(gu)下面q段介绍

== equality {同Q?== identity 恒等?/p> ==Q?两边值类型不同的时候,要先q行cd转换Q再比较?span class="Apple-converted-space"> 
==Q不做类型{换,cd不同的一定不{?span class="Apple-converted-space"> 

下面分别说明Q?span class="Apple-converted-space"> 
先说 ===Q这个比较简单。下面的规则用来判断两个值是?==相等Q?span class="Apple-converted-space"> 
1、如果类型不同,[不相{] 
2、如果两个都是数|q且是同一个|那么[相等]Q?Q例?的是Q如果其中至一个是NaNQ那么[不相{]。(判断一个值是否是NaNQ只能用isNaN()来判断) 
3、如果两个都是字W串Q每个位|的字符都一P那么[相等]Q否则[不相{]?span class="Apple-converted-space"> 
4、如果两个值都是trueQ或者都是falseQ那么[相等]?span class="Apple-converted-space"> 
5、如果两个值都引用同一个对象或函数Q那么[相等]Q否则[不相{]?span class="Apple-converted-space"> 
6、如果两个值都是nullQ或者都是undefinedQ那么[相等]?span class="Apple-converted-space"> 
再说 ==Q根据以下规则: 
1、如果两个值类型相同,q行 === 比较?span class="Apple-converted-space"> 
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型{换再比较Q?span class="Apple-converted-space"> 
a、如果一个是null、一个是undefinedQ那么[相等]?span class="Apple-converted-space"> 
b?em>如果一个是字符Ԍ一个是数|把字W串转换成数值再q行比较?span class="Apple-converted-space"> 
c、如果Q一值是 trueQ把它{换成 1 再比较;如果M值是 falseQ把它{换成 0 再比较?span class="Apple-converted-space"> 
d、如果一个是对象Q另一个是数值或字符Ԍ把对象{换成基础cd的值再比较。对象{换成基础cdQ利用它的toString或者valueOfҎ(gu)?js核心内置c,会尝试valueOf先于toStringQ例外的是DateQDate利用的是toString转换。非js核心的对象,令说Q比较麻 烦,我也不大懂) 
e、Q何其他组合,都[不相{]?span class="Apple-converted-space"> 

不理解的是斜体加_的部分: 如果是一个字W串与数值比较,字W串转化成数值比较?

        alert(parseInt("",10));//NaN
        alert(0=="");//true

不管怎么?=="" true 是没有道理的。就因ؓq个问题让我׃好久去解bug?

衡锋 2010-10-29 17:32 发表评论
]]>
javascript获取/讄 文本?文本域中的光标位|?/title><link>http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Mon, 27 Sep 2010 09:36:00 GMT</pubDate><guid>http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html</guid><wfw:comment>http://www.tkk7.com/Hafeyang/comments/333074.html</wfw:comment><comments>http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/Hafeyang/comments/commentRss/333074.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Hafeyang/services/trackbacks/333074.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; "><!</span><span style="color: #FF00FF; ">DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "> <br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">meta </span><span style="color: #FF0000; ">http-equiv</span><span style="color: #0000FF; ">="Content-Type"</span><span style="color: #FF0000; "> content</span><span style="color: #0000FF; ">="text/html; charset=gb2312"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "> <br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">javascript获取/讄 文本?文本域中的光标位|?/span><span style="color: #0000FF; "></</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">meta </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Keywords"</span><span style="color: #FF0000; "> content</span><span style="color: #0000FF; ">=""</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">meta </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Description"</span><span style="color: #FF0000; "> content</span><span style="color: #0000FF; ">=""</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">meta </span><span style="color: #FF0000; ">http-equiv</span><span style="color: #0000FF; ">="X-UA-Compatible"</span><span style="color: #FF0000; "> content</span><span style="color: #0000FF; ">="IE=EmulateIE7"</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">script </span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text/javascript"</span><span style="color: #0000FF; ">></span><span style="background-color: #F5F5F5; color: #000000; "><br />         </span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; "> getTxt1CursorPosition(){<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> oTxt1 </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">txt1</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=-</span><span style="background-color: #F5F5F5; color: #000000; ">1</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(oTxt1.selectionStart){</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">非IE览?/span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> oTxt1.selectionStart;<br />             }</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">IE</span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> range </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> document.selection.createRange();<br />                 range.moveStart(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">character</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,</span><span style="background-color: #F5F5F5; color: #000000; ">-</span><span style="background-color: #F5F5F5; color: #000000; ">oTxt1.value.length);<br />                 cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">range.text.length;<br />             }<br />             alert(cursurPosition);<br />         }<br /> <br />         </span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; "> setTxt1CursorPosition(i){<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> oTxt1 </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">txt2</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=-</span><span style="background-color: #F5F5F5; color: #000000; ">1</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(oTxt1.selectionStart){</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">非IE览?/span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                oTxt1.selectionStart</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />             }</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">IE</span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> range </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> oTxt1.createTextRange();<br />                 range.move(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">character</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,i);<br />                 range.select();<br />             }<br />         }<br /> <br />         </span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; "> getTa1CursorPosition(){<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> evt </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">window.event</span><span style="background-color: #F5F5F5; color: #000000; ">?</span><span style="background-color: #F5F5F5; color: #000000; ">window.event:getTa1CursorPosition.caller.arguments[</span><span style="background-color: #F5F5F5; color: #000000; ">0</span><span style="background-color: #F5F5F5; color: #000000; ">];<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> oTa1 </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">ta1</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=-</span><span style="background-color: #F5F5F5; color: #000000; ">1</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(oTa1.selectionStart){</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">非IE览?/span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> oTa1.selectionStart;<br />             }</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">IE</span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> range </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> oTa1.createTextRange();<br />                 range.moveToPoint(evt.x,evt.y);<br />                 range.moveStart(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">character</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,</span><span style="background-color: #F5F5F5; color: #000000; ">-</span><span style="background-color: #F5F5F5; color: #000000; ">oTa1.value.length);<br />                 cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">range.text.length;<br />             }<br />             alert(cursurPosition);<br />         }<br /> <br />         </span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; "> setTa1CursorPosition(i){<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> oTa2 </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">ta2</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />             </span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(oTa2.selectionStart){</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">非IE览?/span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                oTa2.selectionStart</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />                 oTa2.selectionEnd</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />             }</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">IE</span><span style="background-color: #F5F5F5; color: #008000; "><br /> </span><span style="background-color: #F5F5F5; color: #000000; ">                </span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; "> range </span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; "> oTa2.createTextRange();<br />                 range.move(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">character</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,i);<br />                 range.select();<br />             }<br />         }<br />     </span><span style="color: #0000FF; "></</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; "></</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br /> <br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">input </span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; "> id</span><span style="color: #0000FF; ">="txt1"</span><span style="color: #FF0000; "> name</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> value</span><span style="color: #0000FF; ">="点击我获取光标位|?</span><span style="color: #FF0000; "> onkeyup</span><span style="color: #0000FF; ">="getTxt1CursorPosition()"</span><span style="color: #FF0000; "> onclick</span><span style="color: #0000FF; ">="getTxt1CursorPosition()"</span><span style="color: #FF0000; ">  </span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br /> <br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">input </span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; "> id</span><span style="color: #0000FF; ">="txt2"</span><span style="color: #FF0000; "> name</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> value</span><span style="color: #0000FF; ">="点击我设|光标位|ؓ5"</span><span style="color: #FF0000; "> onclick</span><span style="color: #0000FF; ">="setTxt1CursorPosition(5)"</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">hr </span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">textarea </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="ta1"</span><span style="color: #FF0000; "> rows</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> cols</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> style</span><span style="color: #0000FF; ">="width:100%; height:90px;"</span><span style="color: #FF0000; "> onclick</span><span style="color: #0000FF; ">="getTa1CursorPosition()"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">abcdefg<br /> hijklmn<br /> opqrst<br /> uvwxyz<br /> 点击我获取文本域的光标位|?/span><span style="color: #0000FF; "></</span><span style="color: #800000; ">textarea</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br /> <br /> </span><span style="color: #0000FF; "><</span><span style="color: #800000; ">textarea </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="ta2"</span><span style="color: #FF0000; "> rows</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> cols</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; "> style</span><span style="color: #0000FF; ">="width:100%; height:90px;"</span><span style="color: #FF0000; "> onclick</span><span style="color: #0000FF; ">="setTa1CursorPosition(30)"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">abcdefg<br /> hijklmn<br /> opqrst<br /> uvwxyz<br /> 点击我设|文本域的光标位|ؓ30</span><span style="color: #0000FF; "></</span><span style="color: #800000; ">textarea</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; "></</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br /> </span><span style="color: #0000FF; "></</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">></span></div> <img src ="http://www.tkk7.com/Hafeyang/aggbug/333074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Hafeyang/" target="_blank">衡锋</a> 2010-09-27 17:36 <a href="http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决IE下javascript:void(0)会触发window.onbeforeunload事ghttp://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html衡锋衡锋Tue, 27 Apr 2010 02:01:00 GMThttp://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.htmlhttp://www.tkk7.com/Hafeyang/comments/319445.htmlhttp://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html#Feedback2http://www.tkk7.com/Hafeyang/comments/commentRss/319445.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/319445.html先看看问题现?/p>

 

<script type="text/javascript">
window.onbeforeunload
=function()
{
    alert(
"onbeforeunload event");
    
//return false;
}
</script>
<a href="#" onclick="return true;">试1</a><br/>
<a href="javascript:void(0)" onclick="return true;">试2</a><br/>
<a href="javascript:void(0)" onclick="return false;">试3</a><br/>
<a href="javascript:void(alert('test 4.'))" onclick="return true;">试4</a><br/>
<a href="javascript:void(alert('test 5.'))" onclick="return false;">试5</a><br/>

 

IE?"试4"Q?试5"会触发window.onbeforeunload事g。这是因?span style="font-size: 14px; line-height: 21px; font-family: verdana, sans-serif">Q点M件触发的时候(调用序Qonclick->window.onbeforeunload->hrefQ?/span>

实际使用的时候还是尽量避免用javascript:void(0)q样的写?可以使用 <a href="###"></a>可以防止锚点Q但是如果已l写了。可以用jQuery的liveҎ(gu)解决Q?/span>

jQuery 1.3中新增的Ҏ(gu)。给所有当前以及将来会匚w的元素绑定一个事件处理函敎ͼ比如click事gQ。也能绑定自定义事g?/p>

目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup?nbsp;

q不支持 blur, focus, mouseenter, mouseleave, change, submit 

与bind()不同的是Qlive()一ơ只能绑定一个事件?/p>


q个Ҏ(gu)跟传l的bind很像Q区别在于用live来绑定事件会l所有当前以及将来在面上的元素l定事g(使用委派的方?。比如说Q如果你l页面上所有的li用livel定了click事g。那么当在以后增加一个li到这个页面时Q对于这个新增加的liQ其click事g依然可用。而无需重新l这U新增加的元素绑定事件?/p>


.live()与流行的liveQuery插g很像Q但有以下几个主要区别:

 

  • .live 目前只支持所有事件的子集Q支持列表参考上面的说明?
  • .live 不支持liveQuery提供?#8220;无事?#8221;样式的回调函数?live只能l定事g处理函数?
  • .live 没有"setup"?cleanup"的过E。因为所有的事g是委z而不是直接绑定在元素上的?

 

要移除用livel定的事ӞLdieҎ(gu)?/p>

具体的解决代码ؓQ?/p>

 

//IE javascript:void(0)会触发window.onbeforeunload事g
        if(document.all){
            $(
"a[href='javascript:void(0)']").live("click",function (e){
                e.preventDefault();
            });
        }

 

 

使用liveҎ(gu)对于新增?lt;a href="javascript:void(0)"></a>仍有效,使用例如jQuery datepick会动态的生成很多q样a标签Q用上q方法可以很好的解决q个问题



衡锋 2010-04-27 10:01 发表评论
]]>
企业Ub/s应用pȝ采用怎样的javascript框架http://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.html衡锋衡锋Sun, 12 Apr 2009 09:25:00 GMThttp://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.htmlhttp://www.tkk7.com/Hafeyang/comments/265142.htmlhttp://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.html#Feedback7http://www.tkk7.com/Hafeyang/comments/commentRss/265142.htmlhttp://www.tkk7.com/Hafeyang/services/trackbacks/265142.html在过ȝ很长的一D|_我都从事b/s应用pȝ开发,我要做的事情是怎样做界面规范以保证UI风格l一Q同时保证开发的高效性。具体而言Q我要做的工作需要把css写好Q开发者做界面时能方便的写html和样式。可更多的经历我都花在javascript上?/p>

问题一Q要不要采用javascript框架Q?/p>

我刚到公司的时候,我们的技术架构师是不同意使用javascript 框架。理由很多,javascript 没有得到应有的重视是主要的原因,他一直强调我们做的是应用pȝ。所以他只在|上扑ֈ几个js攑֜目下面Q然后页面上很ؕQ要写一颗树展现真是ȝ又麻烦。而且大家的javascript水^都很一般,基本只是E微了解一炏V用的最多的q是数据校验Q写的方法还是document.form1.formname,document.add['id']之类的写法。这让我q个天天x界面的技术h?冒昧自称技术h员,其实只是在界面层上有点研I而已)真是抓狂。很讽刺的是Qؓ了用一个小H口弹出错误信息Q把jqeury+ui搬出来。整个项目也只有q么一个地方用到jquery,d的时候jquery的h气正在攀升。我来了之后Q由于自p分小Q在技术上说不上话Q后来大家界面上开发的时候遇到这个那个问题解决不了的时候,大家慢慢的认识到了我的h(hun)倹{新的项目领D我负责界面规范这块,公司也想把这个项目做成一个品。经q很多次“力荐”,我终于说服了大家Q我们不能再"IE only" 了?/p>

我认Z用的理由Q?一Q我们要有兼容各U浏览器的能力,现在新的览器大战正在打响,来的浏览器市场q很难说。在cssq方?我借鉴了ext 的兼Ҏ(gu)想Q在body标签上加上class "IE IE6",q样我们不要使用hack dҎ(gu)览器了。对于javascript上,基本上只有IE和非IE的差别了。主的javascript框架都提供了很好的浏览器支持。二Q用javascript框架的目的是提高开发效率。这与主的javascript不谋而合。三Qweb应用正在飞速发展,界面层应用越来越复杂Qjavascript不在一个校验数据的脚本了,ajax的应用能很好的提升用户体验,有些场合使用ajaxQ用h作更加方ѝD个很单的例子Q很多的记录需要排序,虽然在数据上来看Q只要改变排序D解决问题Q但在界面上Q难道要用户d写排序|q样用户会觉得很难操作,而用上sortableQ这个问题不仅简单,而且操作h不知道清晰多。我们从传统的c/s走到b/s不仅是因为b/s 不需要安装,升Ҏ(gu)。还是因为b/sh更前的表现力?/p>

当然Q反对用javascript框架的理׃很尖锐。一Q开发h员的水^很难以掌握现有的javascript框架。二Q大家坚持认为,其实现在用的javascript的地方还不是很多。从需求上屈指可敎ͼtree,borderlayout,grid,calendar?/p>

Ҏ(gu)Q我提出的想法就是,大家如果觉得难以使用的话Q我在javascript框架上做一ơ封装,降低使用隑ֺ。第二个理由更好_虽然现在使用的地方就那么几个Q那好,你能拿出更好的方案么。曾l架构师_我们希望每一个界面控仉是单独的Q能单独使用。当然现在的Ljavascript 都是q样的。这P我就在大家仍用怀疑的眼光注视我的时候开始了javascript框架之旅?/p>

问题二:用哪个javascript框架Q?/p>

q个问题不是在讨论或者争执哪个好哪个不好Q未免大家再又争执,我让他们自己找javascript框架Q甚臛_以把他们最熟?zhn)的拿出来使用。大伙都说没有时_q样我也不担心有后话了?/p>

我把目前L的javascript分ؓ三类?/p>

诸如Qprototype/jquery/mootoolsq样的javascript框架Q只能是javascript工具。他的优势就是扩展性强Q社区支持很好,其是jquery

W二cd是:yui/ext/dojo/qooxdooq样的框架。他们是一套全pd的纯客户端的ui解决Ҏ(gu)Q用方便,能满x们的需要。缺Ҏ(gu)入口很高Q适用于做富客L。虽然我们现在的应用q是很多Q但是还没有到那个地步?

q有一cd是与服务器端技术结合的ajax框架Q他只能叫ajax框架,他基本只做数据交换。事实上只要做一个简单的servlet(j2ee)或者HttpHanlder(.Net)再在客户端加以封装,使用h也是很方便的。所以这cajax框架我认Z需要考虑?

在我看来Qƈ不是那个框架l对的好坏,而是什么样的框架能最好的满你的需求?

Z人阅历上来讲Q三cȝ多个框架我都知道一二。但是我最喜欢jquery,所以用了jquery了,他的好处是轻量U,扩展性强Q现有的插g以满需要。代码非常简介而且执行效率高。于是我找了一大堆jquery插g。再自己装城稍微简单的Ҏ(gu)。本着不重复发明轮子的原则。很多的界面问题都能解决了?

问题三:真的是那样么Q?

时至2009,目完了Q到了需要再ơ封装城产品的时候,ȝ也就来了。我发现虽然jquery插g很多Q很全,但是׃是百花齐放,我就不想修改里面的代码。慢慢的使用发现很多插g不是很稳定,像jstree,jquery ui ׃先前用的版本比较低,D很有的bug自己写一些修正。现在回q头来看那时候做的东西,发现新的版本已经修复了这些功能。而换上新版本的jqueryQ变化还是蛮多,比如jquery.browser׃推荐使用了,怎么办?

来?

本文是在用jquery之后Q发现维护工作量也不的背景下写下来的。我不知道是不是我当初选择jquery是错误的。是不是应该选择ext 之类的有着更强表现能力Q更E_的框架么Q现在的代码q是不是那么理想。由于很多的历史原因Q大家还在用ecside Qjscalendar。用ecside是因为历史原因。用jscalendar是因为jqueryq没有一个日历控件能支持旉的。我一个h的精力有限,而且我很多的旉都在写项目代?说到底还是领g重视)。我担心我当时做的决定会对将来造成负面影响?

冒昧发在首页上,真诚的希望大家提q看法Q在企业U应用系l上界面层应该怎样做,文中的有些观点如有不对的地方q请大家指教



衡锋 2009-04-12 17:25 发表评论
]]>
վ֩ģ壺 avһ| av߹ۿ| ȫƵѸ| ˳߹ۿ69ʽСƵ| þѶƷ˾| ѹƵ| ҹѸþӰԺ| þþþùƷվ| þaaëƬѲŰ| 99þþùƷ| ĻmvѸ | ޾Ʒ91ר | ޹ƷɫƬۿ| Ļþи| ձһ| AVר߲| ߵӰ| ޹av| ߹ۿר| պ߹ۿƵ| APPѹۿƵ| ÿĻ2019| ߹͵Ʒ| ձһһѿ| ҹƷһ8050| ޾Ʒmv߹ۿ| ۺþþ| պһ | þþþ޾ƷӰ| ޳˻ɫַ| ѿavһ| Ƭѹۿ92ƵƵ | ѿŮҹƬ| þþƷѿ| ŷaѹۿ| ޸רƵ| av뾫Ʒվ | һ| 2020þþƷۺһ| 鶹ȫַ| 99ƵƷר|