﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我是FE，也是Fe-随笔分类-javascript</title><link>http://www.blogjava.net/Hafeyang/category/37209.html</link><description>前端来源于不断的点滴积累。我一直在努力。</description><language>zh-cn</language><lastBuildDate>Wed, 12 Dec 2012 11:12:55 GMT</lastBuildDate><pubDate>Wed, 12 Dec 2012 11:12:55 GMT</pubDate><ttl>60</ttl><item><title>knockoutjs中使用10绑定checkbox</title><link>http://www.blogjava.net/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Wed, 12 Dec 2012 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/392886.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/392886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/392886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍knockoutjs中使用自定义绑定将10值绑定到checkbox上&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/392886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-12-12 17:14 <a href="http://www.blogjava.net/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于raphaeljs的web图实现-rgraph2</title><link>http://www.blogjava.net/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 11 Dec 2012 12:08:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/392832.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/392832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/392832.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍一个基于raphaeljs的web点-线图的实现封装-rgraph2&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/392832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-12-11 20:08 <a href="http://www.blogjava.net/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>强大的管理web包管理工具-bower</title><link>http://www.blogjava.net/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 11 Dec 2012 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/392831.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/392831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/392831.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍一个强大的web包管理工具，基于nodejs的bower&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/392831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-12-11 20:01 <a href="http://www.blogjava.net/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>underscore中的function类函数解析</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/390932.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/390932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/390932.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: undescore中函数相关函数解析&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/390932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-11-08 13:14 <a href="http://www.blogjava.net/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nodejs中全局变量&amp;global对象</title><link>http://www.blogjava.net/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sat, 27 Oct 2012 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/390332.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/390332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/390332.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文介绍在nodejs环境中使用全局变量，以及global对象。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/390332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-10-27 22:29 <a href="http://www.blogjava.net/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nodejs中export与module.export的区别</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/390329.html</wfw:comment><comments>http://www.blogjava.net/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.blogjava.net/Hafeyang/comments/commentRss/390329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/390329.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过一个简单的例子来说明nodejs中exports和module.exports的区别。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/390329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-10-27 21:35 <a href="http://www.blogjava.net/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 中写coffeescript</title><link>http://www.blogjava.net/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Thu, 25 Oct 2012 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/390243.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/390243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/390243.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文介绍在Windows下使用Sublime Text 2 的CoffeeScript 插件写CoffeeScript代码。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/390243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-10-25 23:56 <a href="http://www.blogjava.net/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>兼容AMD,nodejs/commonjs规范的模块定义-读knockoutjs源码</title><link>http://www.blogjava.net/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sat, 18 Aug 2012 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/385734.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/385734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/385734.html</trackback:ping><description><![CDATA[<div>从knockoutjs源码中读到了一个很好的能兼容AMD,commonjs规范的模块定义。看代码
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">/</span><span style="color: #000000">闭包执行一个立即定义的匿名函数<br /></span><span style="color: #000000">!</span><span style="color: #0000ff">function</span><span style="color: #000000">(factory)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">factory是一个函数，下面的koExports就是他的参数</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Support&nbsp;three&nbsp;module&nbsp;loading&nbsp;scenarios</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;require&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;'</span><span style="color: #0000ff">function</span><span style="color: #000000">'&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;exports&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;'object'&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;module&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;'object')&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;[1]&nbsp;CommonJS/Node.js</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;[1]&nbsp;支持在module.exports.abc,或者直接exports.abc</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;target&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;module['exports']&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;exports;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;module.exports&nbsp;is&nbsp;for&nbsp;Node.js</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory(target);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;define&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;'</span><span style="color: #0000ff">function</span><span style="color: #000000">'&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;define['amd'])&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;[2]&nbsp;AMD&nbsp;anonymous&nbsp;module</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;[2]&nbsp;AMD&nbsp;规范&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">define(['exports'],function(exports){</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;exports.abc&nbsp;=&nbsp;function(){<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />}</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">});</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;define(['exports'],&nbsp;factory);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;[3]&nbsp;No&nbsp;module&nbsp;loader&nbsp;(plain&nbsp;&lt;script&gt;&nbsp;tag)&nbsp;-&nbsp;put&nbsp;directly&nbsp;in&nbsp;global&nbsp;namespace</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory(window['ko']&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{});<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}(</span><span style="color: #0000ff">function</span><span style="color: #000000">(koExports){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ko的全局定义&nbsp;koExports是undefined&nbsp;对应着上面的[3]&nbsp;这种情况</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;ko&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;koExports&nbsp;</span><span style="color: #000000">!==</span><span style="color: #000000">&nbsp;'undefined'&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;koExports&nbsp;:&nbsp;{};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义一个ko的方法</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ko.abc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(s){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />});<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">[3]中情况的调用</span><span style="color: #008000"><br /></span><span style="color: #000000">ko.abc(</span><span style="color: #000000">"</span><span style="color: #000000">msg</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div><br />非常巧妙的闭包实现了。三种方式的兼容。摘出来mark一下。<br /><br /><br /><br /><br /><br /></div><img src ="http://www.blogjava.net/Hafeyang/aggbug/385734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-08-18 16:51 <a href="http://www.blogjava.net/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sublime text 2 学习(一)：快捷键，小技巧for前端工程师（持续更新）</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/384754.html</wfw:comment><comments>http://www.blogjava.net/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.blogjava.net/Hafeyang/comments/commentRss/384754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/384754.html</trackback:ping><description><![CDATA[初用sublime text 2，还不错，不装任何插件，能很好的编辑javascript,css,html，很赞。整理一下快捷键：常用的比如Ctrl+S就不列了：而且只列举Windows的。<br /><br />Ctrl+W 关闭当前页签，很通用。<br />Ctrl+Shift+W关闭所有页签，估计能猜到。<br /><br />Ctrl+Shift+v 粘贴并且格式化，比较实用。<br /><br />Ctrl+[ 减少缩进<br />Ctrl+] 增加缩进<br /><br />Ctrl+k,Ctrl+u 先按Ctrl+K,再按Ctrl+U，大写，这有点不习惯<br />Ctrl+k,Ctrl+l 小写<br /><br />ctrl+left,ctrl+right 先左/右移动一个单词，VI中的W,B<br /><br />Ctrl+Shift+up ,当前上上移一行，跟Eclipse一样<br />Ctrl+Shift+down，不说了<br /><br />Ctrl+Shift+K 删除当前选中行，后来发现Ctrl+X也可以，Eclipse里面的Ctrl+D。<br />Ctrl+Shift+D 复制当前选中行，程序员的挚爱<br />Ctrl+D 是高亮光标所在词，类似VIM中的#<br /><br />Ctrl+M 到匹配的{[( 与vim 中的%一致<br />Ctrl+Shift+M 可以选中{[(内容，类似vim中的va( vi{<br /><br />Ctrl+J join rows 合并选中行<br />Ctrl+Shift+J 打散行<br /><br />Ctrl+Shift+T 旋转功能这个标签内容 vim中的vat<br />Ctrl+shift+a 选中匹配的标签<br /><br />Ctrl+T 可以选中多行，然后讲这些行顺序反转。如果没有选中多行，会讲光标前后的字母换顺序。<br /><br />双击选中一个单词,Ctrl+F3跳至下一个匹配处，F3上一个匹配处。<br /><br />F11，我最喜欢的全屏快捷键。<br />Shift+F11更狠，只编辑当前的文件。免打扰模式。两耳清静。<br /><br />alt+. 如果输入&lt;div&gt; 然后alt+. 可以自动完成这个tag，变成&lt;div&gt;&lt;/div&gt;<br /><br />Ctrl+/ Ctrl+Shift+/ 注释/取消注释，各种语言都行。<br /><br />一个小技巧：选中一个单词如abc ，然后输入" 这样 会变成"abc",同理还可以用( { [ '<br /><br />Ctrl+shift+P 调出一个功能列表，可以探索一些好玩的功能，比如我找到了这个功能：HTML:Encoding Special Characters。选中 &amp; 运行一下可以变成 &amp;amp;<br /><br />Ctrl+P 会调出一个对话框框，下拉选项中有当前打开的文件，可以切换，文本框非常强大，输入@funcName 可以直接到函数定义处，输入#key 可以直接查找，输入:行数可以直接到某行，也可以用快捷键Ctrl+g<br /><br />安装了ZenCoding之后可以使用的快捷键： <a href="http://www.cnblogs.com/cocowool/archive/2012/07/01/2572011.html" target="_blank">安装教程</a><br /><br />Ctrl+alt+Enter,zencoding开始了<br />alt+shift+W 环绕选中内容<br /><br /><br />官方文档中有快捷键列表：<a href="http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html">http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html</a><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/Hafeyang/aggbug/384754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-08-09 13:22 <a href="http://www.blogjava.net/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>谈谈前端组件库</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/384477.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/384477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/384477.html</trackback:ping><description><![CDATA[读过，了解过很多的前端控件库/组件库，尝试过，体验过多个失败的，不算失败的组件库之后，总结下来，觉得要构建一个完整的组件库，需要考虑以下几个方面的问题：<br />
<br />
1.基础库：<br />
<br />
注意是库，不是框架，基础库通常提供底层方法，它必须能够屏蔽浏览器/终端的API差异。也许大家脑子里面会弹出一堆前端热门的一些库。在此不讨论哪个库哪个库怎么样，一个基础库必须提供的功能：<br />
<ul>
     <li>基本类型的常见扩展：原生的javascript对象API往往在现实中不够用，比如常见的Array.indexOf/remove/each，Date.parse/format，不管是怎么封装都需要这类方法</li>
     <li>DOM操作常见方法：DOM节点增删改查，CSS selector，DOMReady，contains，add/remove/toggleClass，屏蔽浏览器之间的操作差异。不多说，人人都熟。</li>
     <li>一套浏览器检测机制：以前大家都倾向于做浏览器类型和版本的检测，现在倾向于做浏览器的特性检测，这样更有实际用处。</li>
     <li>Ajax的封装，对于组件库来讲可无。毕竟组件库本身的实现不太会用得上Ajax。</li>
</ul>
<br />
2.事件机制：<br />
<br />
addEventListener/removeEventListener/dispatchEvent 是常见的封装方式，不应该只是DOM事件，而是任何对象都可以做一个事件机制。<br />
对于DOM事件的封装需要屏蔽IE/标准Event的差异提供为用户使用，事件代理非常重要，不可小视。<br />
<ul>
     <li>事件机制都无一例外的是基于第三方观察者或者叫做沙箱(Sandbox)实现。</li>
     <li>事件机制更深的功能是提供一个模块的通信机制。</li>
     <li>对于组件库，组件实例之间的通信更加重要，组件实例之间最好不要存在相互引用的关系，互相不能感知对方的存在，有了事件机制，可以通过第三方有效的通知组件实例，减少组件实例间的耦合。 </li>
</ul>
<br />
3.模板机制：<br />
<br />
实际上写组件的时候，拼装html是一件很复杂的事情，模块能够从数据模型，对于组件库来讲通常是配置信息选项。将这些选项拼装成html字符串。但是大家普遍的一个误区是在追求语法的简便的和性能。我倒觉得模板要做的事情远不止如此。功能强大的模板不仅仅只完成字符串的拼接，而是要简化整个DOM操作，从数据模型到DOM的双向绑定，Model更新了DOM也随之更新。甚至要解决动态DOM事件绑定的问题。<br />
<br />
<br />
4.面向对象的机制<br />
<br />
放在组件库这个角度去谈面向对象的时候，他是一个架构设计中的一个重要的一环。<br />
面向对象的机制能有效的提升代码的可复用性和扩展性，javascript灵活的语法诸如prototype/closure的方式，能构建出一个强大的类库。<br />
可以使用继承机制扩展已有的组件。也可以用引用的方式装饰(Facade)现有组件，个人更倾向于使用装饰。因为继承总会不可避免的直接或者间接去访问父类的一些私有属性方法。<br />
这个机制其实决定了一个组件的代码模型，通常需要解决的问题有：<br />
<ul>
     <li>该组件继承自哪些组件或者基础类，或者依赖于那些类？</li>
     <li>组件实例的管理方式，因为每个组件实例都需要在一个容器中统一存放，理想的的存放模型应该是树形的，在内存中存在类似DOM树一样的组件对象树，是否可以通过类名找到相关实例，根据ID获取实例，获取子实例，父实例，父/子实例之间的通信父实例的resize是否能通知容器内的实例resize。</li>
     <li>插件机制：作为一个非常重要的扩展机制，插件能有效的解决组件间的复用部分，通常这部分会叫做行为(behavior)，对于组件不能提供的甚至是个性化的功能，有没有提供有效的，足够多的扩展点。</li>
     <li>提供怎样的实例化方式？ new XXX() ?? 还是类似DOM的操作方式appendInstance??甚至有类似jq这种链式。我更觉得应该使用appendInstance的方式，这样能更加有效的体现组件示例间的父/子关系。就像DOM操作一样，最终组件实例也是树形结构，如果我们直接new XXX() 这种方式，其实相当于声明了一个游离态的 DOM节点。实际我写代码的时候发现要管理这些组件实例也是比较麻烦的地方，试想一个页面如果有多个组件实例，需要声明多少个实例变量，或者申明多少个对象去存放这些实例。</li>
     <li>组件提供的API，一个组件对外暴露的API会包括初始构造方法，公共方法(method)，事件(event)，对于event，提供怎样的eventData也非常重要。 </li>
</ul>
<br />
5.模块化机制<br />
<br />
如今模块化的思想已经深入人心，模块化带来了很好的团队多人完成一项大的任务的可能性，符合高内聚低耦合的思想。到了如今这个时代，万物皆模块。<br />
组件库通常是一个庞大的工程，单靠个人英雄主义很难做的完整全面。<br />
详细的来讲，模块化机制涉及：<br />
<br />
<ul>
     <li>模块本身的定义，注册，直接影响一个组件的代码模型，一个组件是一个模块。</li>
     <li>模块的依赖申明以及追朔机制：就像前面提到的，依赖于那些类，css文件，资源，数据。不仅仅需要声明，还应该可追朔，依赖的父类，也能找到父类本身所依赖的资源，这样为按需部署打包，在线调试提供居多方便。</li>
     <li>加载机制：因为在开发阶段要么放一个整个组件库代码，要么是通过一个加载器按需加载，到了线上希望只部署引用到了模块组件，这样可以减少实际部署的文件大小。加载机制会涉及到浏览器的javascript/css文件的加载，尤其是需要尽可能的并行下载而且按照依赖关系先后执行。包括应用模块，可以方便的通过这种加载机制延迟，按需，按时的加载到页面中。</li>
     <li>打包部署机制：由于依赖可追朔，这样实际项目中用到的那些组件可以分析出来，最终可以根据实际使用到的情况打包出适合大小的组件库，减小冗余包的存在。</li>
     <li>模块间的通信机制，由于模块减轻耦合甚至是独自孤立存在，组件之间的通信就非常重要，比如通常一个页面上面的菜单组件实例点击需要触发下面组件的更新。如果直接监听菜单事件去更新下面的组件，也许菜单是每个页面都有。但是下面的组件不是每个页面都有，这样的事件监听就显然耦合较重，互相依赖对方的存在。如果菜单点击这是告诉第三方我被点击了。下面的组件只去监听第三方的事件，这样的代码思路明显要好过很多。 </li>
</ul>
需要再次强调的是万物皆模块，这意味着通用组件本身实现是一个模块，实际应用场景中的业务模块也是模块，都需要遵守模块的约定。<br />
<br />
6.前端的基本开发思想<br />
<br />
取决于个人经验：比如MVC的思想在组件实现过程中非常重要，Model通常是构造函数中那一堆配置信息，View通常是需要通过Model提供数据用户呈现，实际上View上的操作的相应都需要Model来记住状态。Controller用于操作二者。原理大家都知道，在开发中怎样分清三者界限。保证思路清晰。<br />
<br />
 前端中javascript/css/html的角色也类似与MVC。下面的一些代码方式就有违MVC的一些思想：<br/>
<ul>
     <li>css Expression:不仅IE only，更重要是CSS中写javascript这个风格不对，难以维护。</li>
     <li>javascript直接修改style.xxx='xx'。能写成css class的最好都写成css class。</li>
     <li>html中直接写onxxx="foo()"，没有人能保证foo方法存在不被修改。</li>
</ul>
<br />
7.其他需要考虑的问题：<br />
<ul>
     <li>测试用例：通用组件库是一个庞大的工程，也许牵一发动全身，不知道哪个API的变动会影响多少调用者，有充足的单侧用例，一定程度上能保证整个组件库的稳定性。</li>
     <li>粒度：粒度是一个很值得思考的问题，其实html的标签可以当做是一个小的组件，只是因为粒度很小，要完成一个复杂的应用，有很多的可复用组件都需要用到大片大片的重复html片段。另外一个极端，我们我们把整个页面都写成一个组件，显然没有复用性，跟没封装一样。所以选择一个合适的组件粒度，一个组件完成特定的功能，有利于搭建出有想象力的应用。</li>
     <li>一致性：需要有很好的代码规范和约定。才能保证API的一致性，用户也会理所当然的想到怎样用API，降低学习成本，一个最常见的例子就事件监听的参数，建议统一为(eventObject,eventData)。</li>
     <li>文档&amp;Demo:这个不用多说，没有文档和demo的东西没有人去看代码怎么使用。</li>
     <li>性能：DOM操作是组件库的性能杀手，高效的DOM操作尤其重要，事件监听也是非常耗时的，建议能采用代理的都用父节点来代理。</li>
     <li>资源释放：组件的资源，引用是否能完全释放？尤其是开发SPA，组件的资源内存释放就非常重要了。 </li>
</ul>
<br />
总结：<br />
零零星星的提到了这么几点，也是过去工作中的体会，当然会有不足，望大家补充，回头可以check一下现在用到的一些框架/组件。欢迎讨论。
<img src ="http://www.blogjava.net/Hafeyang/aggbug/384477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2012-08-01 01:19 <a href="http://www.blogjava.net/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效果</title><link>http://www.blogjava.net/Hafeyang/archive/2011/06/17/div_as_frameset.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Fri, 17 Jun 2011 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2011/06/17/div_as_frameset.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/352501.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/06/17/div_as_frameset.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/352501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/352501.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用div，通过css控制布局定位来实现frameset的效果&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/06/17/div_as_frameset.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/352501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-06-17 12:26 <a href="http://www.blogjava.net/Hafeyang/archive/2011/06/17/div_as_frameset.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用正则替换textarea种的重复行</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/352500.html</wfw:comment><comments>http://www.blogjava.net/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.blogjava.net/Hafeyang/comments/commentRss/352500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/352500.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用正则表达式去除textarea中的重复行&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/352500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-06-17 12:16 <a href="http://www.blogjava.net/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高度自动增加</title><link>http://www.blogjava.net/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sun, 15 May 2011 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/350286.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/350286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/350286.html</trackback:ping><description><![CDATA[<p>
最初看到这个命题，觉得不是不是直接监听事件然后设计高度么？于是我想当然的写了这么一段代码：</p>
<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 />--><img id="Codehighlighter1_31_109_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_109_Open_Text.style.display='none'; Codehighlighter1_31_109_Closed_Image.style.display='inline'; Codehighlighter1_31_109_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none;" id="Codehighlighter1_31_109_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_31_109_Closed_Text.style.display='none'; Codehighlighter1_31_109_Open_Image.style.display='inline'; Codehighlighter1_31_109_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: rgb(0, 0, 255);">&lt;</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);">&gt;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_31_109_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_31_109_Open_Text"><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br />
<img id="Codehighlighter1_54_108_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_108_Open_Text.style.display='none'; Codehighlighter1_54_108_Closed_Image.style.display='inline'; Codehighlighter1_54_108_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none;" id="Codehighlighter1_54_108_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_54_108_Closed_Text.style.display='none'; Codehighlighter1_54_108_Open_Image.style.display='inline'; Codehighlighter1_54_108_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></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);"> autoheight()</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_54_108_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_54_108_Open_Text"><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">this</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">.height</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);"> </span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">this</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">.scrollHeight</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">+</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">this</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">.height</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">px</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 />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />    }</span></span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">textarea </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> rows</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> cols</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> onpropertychange</span><span style="color: rgb(0, 0, 255);">="autoheight();"</span><span style="color: rgb(255, 0, 0);"> oninput</span><span style="color: rgb(0, 0, 255);">="autoheight()"</span><span style="color: rgb(255, 0, 0);"> style</span><span style="color: rgb(0, 0, 255);">="overflow:hidden;"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">textarea</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p>这个代码我没有运行，因为一边写就发现不对劲，在propertychange函数中改变property会再次触发propertychange事件，结果就可想而知了。stack overflow。</p>
<p>所以需要换一种思路，新建一个textarea，将同样大的文本放到属性一样的textarea中计算其高度，然后把高度设置到目标textarea中。</p>
<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);">&lt;</span><span style="color: rgb(128, 0, 0);">script&nbsp;</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);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</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);">基本函数*2</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);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;addHandler&nbsp;</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);">&nbsp;window.addEventListener</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 />
&nbsp;&nbsp;&nbsp;&nbsp;</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);">(elem,event,handler){elem.addEventListener(event,handler);}:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</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);">(elem,event,handler){elem.attachEvent(</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);">on</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);">+</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">event,handler);};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;$&nbsp;</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);">&nbsp;</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);">(id){</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">return</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;document.getElementById(id);}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</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);">&nbsp;autoTextArea(elemid){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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);">新建一个textarea用户计算高度</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">if</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);">!</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">_textareacopy</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;t&nbsp;</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);">&nbsp;document.createElement(</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);">textarea</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.id</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">_textareacopy</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.style.position</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">absolute</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.style.left</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">-9999px</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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);">&nbsp;change(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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);">_textareacopy</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);">).value</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);">&nbsp;$(elemid).value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(elemid).style.height</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);">&nbsp;$(</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);">_textareacopy</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);">).scrollHeight</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);">$(</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);">_textareacopy</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);">).style.height</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">px</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addHandler($(</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);">target</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);">),</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);">propertychange</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);">,change);</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);">for&nbsp;IE</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addHandler($(</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);">target</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);">),</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);">input</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);">,change);</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);">&nbsp;for&nbsp;!IE</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(elemid).style.overflow</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">hidden</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);">;</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);">一处隐藏，必须的。</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(elemid).style.resize</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);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">none</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);">;</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);">去掉textarea能拖拽放大/缩小高度/宽度功能</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);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;addHandler(window,</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);">load</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);">,</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoTextArea(</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);">target</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 />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">textarea&nbsp;</span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="target"</span><span style="color: rgb(255, 0, 0);">&nbsp;rows</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);">&nbsp;cols</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">textarea</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p>搞清楚原理其实就简单多了。要捕捉textarea的change事件在IE下可以使用propertychange,在!IE下可以使用input。</p>
<p>一些textarea资料做参考：</p>
<ol>
    <li>textarea 的一些小技巧 <a href="http://css-tricks.com/textarea-tricks/">http://css-tricks.com/textarea-tricks/</a></li>
    <li>本文的直接资料来源：<a href="http://www.planeart.cn/?p=1489">http://www.planeart.cn/?p=1489</a></li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/Hafeyang/aggbug/350286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-05-15 19:40 <a href="http://www.blogjava.net/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery中的stopImmediatePropagation与stopPropagation的区别</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/349697.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/349697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/349697.html</trackback:ping><description><![CDATA[有这么个需求。要在一个文本框上监听两个事件，例如:
<div>&nbsp;</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);">&lt;</span><span style="color: rgb(128, 0, 0);">script&nbsp;</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);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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可以阻止在这之后绑定的事件</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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);">比较注释和不注释这一行的区别</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);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.stopImmediatePropagation();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">input&nbsp;</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);">&nbsp;id</span><span style="color: rgb(0, 0, 255);">="t"</span><span style="color: rgb(255, 0, 0);">&nbsp;name</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">span&nbsp;</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);">&nbsp;id</span><span style="color: rgb(0, 0, 255);">="s"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">span</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
</div>
<div>&nbsp;</div>
<div>如果在第一个事件中需要阻止第二个事件的执行可以在第一个事件中使用event.stopImmediatePropagation方法。jQuery的event的对象是增强的event对象，<br />
stopImmediatePropagation就是jQuery独有的一种阻止jQuery绑定事件机制。可以通过<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;" href="http://api.jquery.com/event.isImmediatePropagationStopped">isImmediatePropagationStopped()</a></span></span>来判断是否阻止了jQuery立即冒泡。</div>
<div>&nbsp;</div>
<div>stopImmediatePropagation的实现可以参见我之前的一篇文章，<a href="http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html">从jQuery的缓存到事件监听</a>
在这篇文章中提到jQuery将事件都缓存在一个数组中按照先后顺序执行。如果stopImmediatePropagation就停止执行数组中的监听函数。</div>
<div>&nbsp;</div>
<div>stopPropagation是阻止默认事件监听函数。不是jQuery独有，阻止默认事件的冒泡，比如监听了DOM节点和该节点的父节点的事件，默认是事件执行将从里到外，这就是所谓的冒泡。在IE9-浏览器中可以使用event.cancelBubble=false来做到，标准浏览器使用event.stopPropagation方法。jQuery也把stopPropagation扩展方式到IE上这样有了一致的方法。</div>
<div>&nbsp;</div>
<div>综上所述，其实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>&nbsp;</div>
  <img src ="http://www.blogjava.net/Hafeyang/aggbug/349697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-05-06 18:04 <a href="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/348563.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/348563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/348563.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简单的分析jQuery中delegate和live方法的实现原理。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/348563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-04-19 12:07 <a href="http://www.blogjava.net/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性能（一）：性能问题何来？</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/343131.html</wfw:comment><comments>http://www.blogjava.net/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.blogjava.net/Hafeyang/comments/commentRss/343131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/343131.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在grid中放大数据量时的性能问题分析。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/343131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-01-18 10:25 <a href="http://www.blogjava.net/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解析平铺树形数据</title><link>http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Thu, 13 Jan 2011 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/342937.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/342937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/342937.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍将平铺树形数据解析成层次型数数据的方法&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/342937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-01-13 16:40 <a href="http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从jQuery的缓存到事件监听</title><link>http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 04 Jan 2011 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/342286.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/342286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/342286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过分析jQuery缓存的实现，更好的理解jQuery的事件监听机制。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/342286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2011-01-04 15:20 <a href="http://www.blogjava.net/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样高效的批量删除javascript 数组中的元素？</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/341917.html</wfw:comment><comments>http://www.blogjava.net/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.blogjava.net/Hafeyang/comments/commentRss/341917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/341917.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文探讨怎样批量删除javascript数组中的元素。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/341917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2010-12-29 15:58 <a href="http://www.blogjava.net/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的readyState</title><link>http://www.blogjava.net/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sun, 12 Dec 2010 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/340397.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/340397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/340397.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文介绍了iframe的readyState属性以及试用范围。&nbsp;&nbsp;<a href='http://www.blogjava.net/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html'>阅读全文</a><img src ="http://www.blogjava.net/Hafeyang/aggbug/340397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2010-12-12 16:34 <a href="http://www.blogjava.net/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript == === 陷阱&amp;不解</title><link>http://www.blogjava.net/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Fri, 29 Oct 2010 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/336504.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/336504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/336504.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">0</span><span style="color: #000000">==</span><span style="color: #000000">""</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">true</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">0</span><span style="color: #000000">==</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">true</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">0</span><span style="color: #000000">===</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #0000ff">null</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(undefined</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">true</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(undefined&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">true==\</span><span style="color: #000000">"</span><span style="color: #0000ff">true</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">==</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">false==\</span><span style="color: #000000">"</span><span style="color: #0000ff">false</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">(</span><span style="color: #0000ff">false</span><span style="color: #000000">==</span><span style="color: #000000">"</span><span style="color: #000000">false</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span></div>
<br />
NaN有点特例：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(NaN</span><span style="color: #000000">==</span><span style="color: #000000">NaN);</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(NaN</span><span style="color: #000000">==</span><span style="color: #000000">undefined);</span><span style="color: #008000">//</span><span style="color: #008000">false</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(NaN</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">false</span></div>
<br />
<br />
<br />
根据下面这段介绍<br />
<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -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="line-height: 21px; font-family: verdana, ����, Arial; color: rgb(51,51,51); font-size: 14px" class="Apple-style-span">
<p style="padding-bottom: 0px; text-indent: 0px; margin: 5px auto; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<div style="border-bottom: #666666 1px solid; border-left: #666666 1px solid; border-top: #666666 1px solid; border-right: #666666 1px solid">
<p style="padding-bottom: 0px; text-indent: 0px; margin: 5px auto; padding-left: 0px; padding-right: 0px; padding-top: 0px">== equality 等同，=== identity 恒等。</p>
==， 两边值类型不同的时候，要先进行类型转换，再比较。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
==，不做类型转换，类型不同的一定不等。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
下面分别说明：<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
先说 ===，这个比较简单。下面的规则用来判断两个值是否===相等：<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
1、如果类型不同，就[不相等]<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
2、如果两个都是数值，并且是同一个值，那么[相等]；(！例外)的是，如果其中至少一个是NaN，那么[不相等]。（判断一个值是否是NaN，只能用isNaN()来判断）<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
3、如果两个都是字符串，每个位置的字符都一样，那么[相等]；否则[不相等]。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
4、如果两个值都是true，或者都是false，那么[相等]。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
5、如果两个值都引用同一个对象或函数，那么[相等]；否则[不相等]。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
6、如果两个值都是null，或者都是undefined，那么[相等]。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
再说 ==，根据以下规则：<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
1、如果两个值类型相同，进行 === 比较。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
2、如果两个值类型不同，他们可能相等。根据下面规则进行类型转换再比较：<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
a、如果一个是null、一个是undefined，那么[相等]。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
b、<em><strong>如果一个是字符串，一个是数值，把字符串转换成数值再进行比较。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
</strong></em>c、如果任一值是 true，把它转换成 1 再比较；如果任一值是 false，把它转换成 0 再比较。<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
d、如果一个是对象，另一个是数值或字符串，把对象转换成基础类型的值再比较。对象转换成基础类型，利用它的toString或者valueOf方法。 js核心内置类，会尝试valueOf先于toString；例外的是Date，Date利用的是toString转换。非js核心的对象，令说（比较麻 烦，我也不大懂）<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />
e、任何其他组合，都[不相等]。<span class="Apple-converted-space">&nbsp;</span></div>
不理解的是斜体加粗的部分: 如果是一个字符串与数值比较，将字符串转化成数值比较？<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(parseInt(</span><span style="color: #000000">""</span><span style="color: #000000">,</span><span style="color: #000000">10</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">NaN</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">0</span><span style="color: #000000">==</span><span style="color: #000000">""</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">true</span></div>
</span></span><br />
不管怎么说0=="" true 是没有道理的。就因为这个问题让我花了好久去解bug。
<img src ="http://www.blogjava.net/Hafeyang/aggbug/336504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2010-10-29 17:32 <a href="http://www.blogjava.net/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript获取/设置 文本框/文本域中的光标位置</title><link>http://www.blogjava.net/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.blogjava.net/Hafeyang/archive/2010/09/27/333074.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/333074.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2010/09/27/333074.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/333074.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/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; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">meta&nbsp;</span><span style="color: #FF0000; ">http-equiv</span><span style="color: #0000FF; ">="Content-Type"</span><span style="color: #FF0000; ">&nbsp;content</span><span style="color: #0000FF; ">="text/html;&nbsp;charset=gb2312"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">javascript获取/设置&nbsp;文本框/文本域中的光标位置</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">meta&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Keywords"</span><span style="color: #FF0000; ">&nbsp;content</span><span style="color: #0000FF; ">=""</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">meta&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Description"</span><span style="color: #FF0000; ">&nbsp;content</span><span style="color: #0000FF; ">=""</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">meta&nbsp;</span><span style="color: #FF0000; ">http-equiv</span><span style="color: #0000FF; ">="X-UA-Compatible"</span><span style="color: #FF0000; ">&nbsp;content</span><span style="color: #0000FF; ">="IE=EmulateIE7"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">script&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text/javascript"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;getTxt1CursorPosition(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTxt1&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTxt1.selectionStart;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;range&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;document.selection.createRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">range.text.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(cursurPosition);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;setTxt1CursorPosition(i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTxt1&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTxt1.selectionStart</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;range&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTxt1.createTextRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;range.select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;getTa1CursorPosition(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;evt&nbsp;</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTa1&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTa1.selectionStart;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;range&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTa1.createTextRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;range.moveToPoint(evt.x,evt.y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursurPosition</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">range.text.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(cursurPosition);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;setTa1CursorPosition(i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTa2&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTa2.selectionStart</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTa2.selectionEnd</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;range&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;oTa2.createTextRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;range.select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; ">&nbsp;id</span><span style="color: #0000FF; ">="txt1"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="点击我获取光标位置"</span><span style="color: #FF0000; ">&nbsp;onkeyup</span><span style="color: #0000FF; ">="getTxt1CursorPosition()"</span><span style="color: #FF0000; ">&nbsp;onclick</span><span style="color: #0000FF; ">="getTxt1CursorPosition()"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; ">&nbsp;id</span><span style="color: #0000FF; ">="txt2"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="点击我设置光标位置为5"</span><span style="color: #FF0000; ">&nbsp;onclick</span><span style="color: #0000FF; ">="setTxt1CursorPosition(5)"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">hr&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">textarea&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="ta1"</span><span style="color: #FF0000; ">&nbsp;rows</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;cols</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;style</span><span style="color: #0000FF; ">="width:100%;&nbsp;height:90px;"</span><span style="color: #FF0000; ">&nbsp;onclick</span><span style="color: #0000FF; ">="getTa1CursorPosition()"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">abcdefg<br />
hijklmn<br />
opqrst<br />
uvwxyz<br />
点击我获取文本域的光标位置</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">textarea</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">textarea&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="ta2"</span><span style="color: #FF0000; ">&nbsp;rows</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;cols</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;style</span><span style="color: #0000FF; ">="width:100%;&nbsp;height:90px;"</span><span style="color: #FF0000; ">&nbsp;onclick</span><span style="color: #0000FF; ">="setTa1CursorPosition(30)"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">abcdefg<br />
hijklmn<br />
opqrst<br />
uvwxyz<br />
点击我设置文本域的光标位置为30</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">textarea</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span></div>
<img src ="http://www.blogjava.net/Hafeyang/aggbug/333074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2010-09-27 17:36 <a href="http://www.blogjava.net/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事件</title><link>http://www.blogjava.net/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Tue, 27 Apr 2010 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/319445.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/319445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/319445.html</trackback:ping><description><![CDATA[<p>先看看问题现象</p>
<p>&nbsp;</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
window.onbeforeunload</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">onbeforeunload&nbsp;event<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;false;</span><span style="color: #008000"><br />
</span><span style="color: #000000">}<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">return&nbsp;true;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">测试1</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(0)</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">return&nbsp;true;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">测试2</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(0)</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">return&nbsp;false;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">测试3</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(alert('test&nbsp;4<img alt="" src="http://www.blogjava.net/Images/dot.gif" />.'))</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">return&nbsp;true;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">测试4</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(alert('test&nbsp;5<img alt="" src="http://www.blogjava.net/Images/dot.gif" />.'))</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">return&nbsp;false;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">测试5</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p>IE下,"测试4"，"测试5"会触发window.onbeforeunload事件。这是因为<span style="font-size: 14px; line-height: 21px; font-family: verdana, sans-serif">，点击事件触发的时候（<strong>调用顺序：onclick-&gt;window.onbeforeunload-&gt;href</strong>）。</span></p>
<p><font face="verdana, sans-serif" size="4"><span style="font-size: 14px; line-height: 21px">实际使用的时候还是尽量避免使用javascript:void(0)这样的写法,可以使用 &lt;a href="###"&gt;&lt;/a&gt;可以防止锚点，但是如果已经写了。可以用jQuery的live方法解决：</span></font></p>
<p><font face="verdana, sans-serif" size="4"></font></p>
<font face="verdana, sans-serif" size="4">
<p>jQuery 1.3中新增的方法。给所有当前以及将来会匹配的元素绑定一个事件处理函数（比如click事件）。也能绑定自定义事件。</p>
<p>目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup。&nbsp;</p>
<p>还不支持 blur, focus, mouseenter, mouseleave, change, submit&nbsp;</p>
<p>与bind()不同的是，live()一次只能绑定一个事件。</p>
<p><br />
</p>
<p>这个方法跟传统的bind很像，区别在于用live来绑定事件会给所有当前以及将来在页面上的元素绑定事件(使用委派的方式)。比如说，如果你给页面上所有的li用live绑定了click事件。那么当在以后增加一个li到这个页面时，对于这个新增加的li，其click事件依然可用。而无需重新给这种新增加的元素绑定事件。</p>
<p><br />
</p>
<p>.live()与流行的liveQuery插件很像，但有以下几个主要区别：</p>
<p>&nbsp;</p>
<ul>
    <li>.live 目前只支持所有事件的子集，支持列表参考上面的说明。
    </li>
    <li>.live 不支持liveQuery提供的&#8220;无事件&#8221;样式的回调函数。.live只能绑定事件处理函数。
    </li>
    <li>.live 没有"setup"和"cleanup"的过程。因为所有的事件是委派而不是直接绑定在元素上的。 </li>
</ul>
<p>&nbsp;</p>
<p>要移除用live绑定的事件，请用die方法。</p>
<p>具体的解决代码为：</p>
<p>&nbsp;</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">//</span><span style="color: #008000">IE&nbsp;javascript:void(0)会触发window.onbeforeunload事件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(document.all){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">a[href='javascript:void(0)']</span><span style="color: #000000">"</span><span style="color: #000000">).live(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;(e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.preventDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
</font>
<p>&nbsp;</p>
<p>使用live方法对于新增的&lt;a href="javascript:void(0)"&gt;&lt;/a&gt;仍有效，使用例如jQuery datepick会动态的生成很多这样a标签，使用上述方法可以很好的解决这个问题</p>
<img src ="http://www.blogjava.net/Hafeyang/aggbug/319445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2010-04-27 10:01 <a href="http://www.blogjava.net/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>企业级b/s应用系统采用怎样的javascript框架</title><link>http://www.blogjava.net/Hafeyang/archive/2009/04/12/265142.html</link><dc:creator>衡锋</dc:creator><author>衡锋</author><pubDate>Sun, 12 Apr 2009 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/Hafeyang/archive/2009/04/12/265142.html</guid><wfw:comment>http://www.blogjava.net/Hafeyang/comments/265142.html</wfw:comment><comments>http://www.blogjava.net/Hafeyang/archive/2009/04/12/265142.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/Hafeyang/comments/commentRss/265142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Hafeyang/services/trackbacks/265142.html</trackback:ping><description><![CDATA[<p>在过去的很长的一段时间，我都从事b/s应用系统开发，我要做的事情就是怎样做界面规范以保证UI风格统一，同时保证开发的高效性。具体而言，我要做的工作需要把css写好，开发者做界面时能方便的写html和样式。可更多的经历我都花在javascript上。</p> <p>问题一：要不要采用javascript框架？</p> <p>我刚到公司的时候，我们的技术架构师是不同意使用javascript 框架。理由很多，javascript 没有得到应有的重视是主要的原因，他一直强调我们做的是应用系统。所以他只在网上找到几个js放在项目下面，然后页面上很乱，要写一颗树展现真是麻烦又麻烦。而且大家的javascript水平都很一般，基本只是稍微了解一点。用的最多的还是数据校验，写的方法还是document.form1.formname,document.add['id']之类的写法。这让我这个天天关注界面的技术人员(冒昧自称技术人员，其实只是在界面层上有点研究而已)真是抓狂。很讽刺的是，为了使用一个小窗口弹出错误信息，把jqeury+ui搬出来。整个项目也只有这么一个地方用到jquery,去年的时候jquery的人气正在攀升。我来了之后，由于自己辈分小，在技术上说不上话，后来大家界面上开发的时候遇到这个那个问题解决不了的时候，大家慢慢的认识到了我的价值。新的项目领导让我负责界面规范这块，公司也想把这个项目做成一个产品。经过很多次“力荐”，我终于说服了大家，我们不能再"IE only" 了。</p> <p>我认为使用的理由： 一，我们要有兼容各种浏览器的能力，现在新的浏览器大战正在打响，将来的浏览器市场还很难说。在css这方面 我借鉴了ext 的兼容思想，在body标签上加上class "IE IE6",这样我们不要使用hack 去兼容浏览器了。对于javascript上，基本上只有IE和非IE的差别了。主流的javascript框架都提供了很好的浏览器支持。二，用javascript框架的目的是提高开发效率。这与主流的javascript不谋而合。三，web应用正在飞速发展，界面层应用越来越复杂，javascript不在一个校验数据的脚本了，ajax的应用能很好的提升用户体验，有些场合使用ajax，用户操作更加方便。举个很简单的例子，很多的记录需要排序，虽然在数据上来看，只要改变排序值能解决问题，但在界面上，难道要用户去填写排序值，这样用户会觉得很难操作，而用上sortable，这个问题不仅简单，而且操作起来不知道清晰多少。我们从传统的c/s走到b/s不仅是因为b/s 不需要安装，升级容易。还是因为b/s具有更前的表现力。</p> <p>当然，反对使用javascript框架的理由也很尖锐。一，开发人员的水平很难以掌握现有的javascript框架。二，大家坚持认为，其实现在用的javascript的地方还不是很多。从需求上将屈指可数，tree,borderlayout,grid,calendar。</p> <p>对此，我提出的想法就是，大家如果觉得难以使用的话，我在javascript框架上做一次封装，降低使用难度。第二个理由更好说，虽然现在使用的地方就那么几个，那好，你能拿出更好的方案么。曾经架构师说，我们希望每一个界面控件都是单独的，能单独使用。当然现在的主流javascript 都是这样的。这样，我就在大家仍用怀疑的眼光注视我的时候开始了javascript框架之旅。</p> <p>问题二：用哪个javascript框架？</p> <p>这个问题不是在讨论或者争执哪个好哪个不好，未免大家再又争执，我让他们自己找javascript框架，甚至可以把他们最熟悉的拿出来使用。大伙都说没有时间，这样我也不担心有人说后话了。</p> <p>我把目前主流的javascript分为三类。</p> <p>诸如：prototype/jquery/mootools这样的javascript框架，只能是javascript工具。他的优势就是扩展性强，社区支持很好，尤其是jquery <p>第二类就是：yui/ext/dojo/qooxdoo这样的框架。他们是一套全系列的纯客户端的ui解决方案，使用方便，能满足我们的需要。缺点是入口很高，适用于做富客户端。虽然我们现在的应用还是很多，但是还没有到那个地步。 <p>还有一类就是与服务器端技术结合的ajax框架，他只能叫ajax框架,他基本只做数据交换。事实上只要做一个简单的servlet(j2ee)或者HttpHanlder(.Net)再在客户端加以封装，使用起来也是很方便的。所以这类ajax框架我认为不需要考虑。 <p>在我看来，并不是那个框架绝对的好坏，而是什么样的框架能最好的满足你的需求。 <p>论个人阅历上来讲，三类的多个框架我都知道一二。但是我最喜欢jquery,所以使用了jquery了，他的好处就是轻量级，扩展性强，现有的插件足以满足需要。代码非常简介而且执行效率高。于是我找了一大堆jquery插件。再自己封装城稍微简单的方法。本着不重复发明轮子的原则。很多的界面问题都能解决了。 <p>问题三：真的是那样么？ <p>时至2009,项目完了，到了需要再次封装城产品的时候，麻烦也就来了。我发现虽然jquery插件很多，很全，但是由于是百花齐放，我就不想修改里面的代码。慢慢的使用发现很多插件不是很稳定，像jstree,jquery ui 由于先前用的版本比较低，导致很有的bug自己写一些修正。现在回过头来看那时候做的东西，发现新的版本已经修复了这些功能。而换上新版本的jquery，变化还是蛮多，比如jquery.browser就不推荐使用了，怎么办。 <p>将来。 <p>本文就是在使用jquery之后，发现维护工作量也不小的背景下写下来的。我不知道是不是我当初选择jquery是错误的。是不是应该选择ext 之类的有着更强表现能力，更稳定的框架么？现在的代码还是不是那么理想。由于很多的历史原因，大家还在用ecside ，jscalendar。使用ecside是因为历史原因。使用jscalendar是因为jquery还没有一个日历控件能支持时间的。我一个人的精力有限，而且我很多的时间都在写项目代码(说到底还是领导不重视)。我担心我当时做的决定会对将来造成负面影响。 <p>冒昧发在首页上，真诚的希望大家提出自己的看法，在企业级应用系统上界面层应该怎样做，文中的有些观点如有不对的地方还请大家指教</p><img src ="http://www.blogjava.net/Hafeyang/aggbug/265142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Hafeyang/" target="_blank">衡锋</a> 2009-04-12 17:25 <a href="http://www.blogjava.net/Hafeyang/archive/2009/04/12/265142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>