??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av成人一区二区三区观看在线
,国产亚洲3p无码一区二区,国产亚洲av片在线观看16女人
http://www.tkk7.com/Hafeyang/category/37209.html前端来源于不断的Ҏ(gu)U篏。我一直在努力?/description>zh-cn Wed, 12 Dec 2012 11:12:55 GMT Wed, 12 Dec 2012 11:12:55 GMT 60 knockoutjs中?0l定checkbox http://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html衡锋 衡锋 Wed, 12 Dec 2012 09:14:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html http://www.tkk7.com/Hafeyang/comments/392886.html http://www.tkk7.com/Hafeyang/archive/2012/12/12/using_knockoutjs_custom_binding_to_bind_10_to_checkbox.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/392886.html http://www.tkk7.com/Hafeyang/services/trackbacks/392886.html 阅读全文 ]]> Zraphaeljs的web囑֮?rgraph2 http://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html衡锋 衡锋 Tue, 11 Dec 2012 12:08:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html http://www.tkk7.com/Hafeyang/comments/392832.html http://www.tkk7.com/Hafeyang/archive/2012/12/11/rgraph2_an_graph_implementation_by_raphaeljs.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/392832.html http://www.tkk7.com/Hafeyang/services/trackbacks/392832.html 阅读全文 ]]> 强大的管理web包管理工?bower http://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html衡锋 衡锋 Tue, 11 Dec 2012 12:01:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html http://www.tkk7.com/Hafeyang/comments/392831.html http://www.tkk7.com/Hafeyang/archive/2012/12/11/an_introduction_of_powerfull_web_package_mange_tool_named_bower.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/392831.html http://www.tkk7.com/Hafeyang/services/trackbacks/392831.html 阅读全文 ]]> underscore中的functioncd数解?/title> http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html衡锋 衡锋 Thu, 08 Nov 2012 05:14:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html http://www.tkk7.com/Hafeyang/comments/390932.html http://www.tkk7.com/Hafeyang/archive/2012/11/08/undercore_function_uitlity.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/390932.html http://www.tkk7.com/Hafeyang/services/trackbacks/390932.html 阅读全文 ]]> nodejs中全局变量&global对象 http://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html衡锋 衡锋 Sat, 27 Oct 2012 14:29:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html http://www.tkk7.com/Hafeyang/comments/390332.html http://www.tkk7.com/Hafeyang/archive/2012/10/27/global_variable_and_global_object_in_nodejs.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/390332.html http://www.tkk7.com/Hafeyang/services/trackbacks/390332.html 阅读全文 ]]> nodejs中export与module.export的区?/title> http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html衡锋 衡锋 Sat, 27 Oct 2012 13:35:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html http://www.tkk7.com/Hafeyang/comments/390329.html http://www.tkk7.com/Hafeyang/archive/2012/10/27/diifference_between_exports_and_module_dot_exports_in_nodejs.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/390329.html http://www.tkk7.com/Hafeyang/services/trackbacks/390329.html 阅读全文 ]]> sublime text 2 (? 在sublime text 2 中写coffeescript http://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html衡锋 衡锋 Thu, 25 Oct 2012 15:56:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html http://www.tkk7.com/Hafeyang/comments/390243.html http://www.tkk7.com/Hafeyang/archive/2012/10/25/using_sublime_text_2_coffeescript_plugin_in_windows.html#Feedback 3 http://www.tkk7.com/Hafeyang/comments/commentRss/390243.html http://www.tkk7.com/Hafeyang/services/trackbacks/390243.html 阅读全文 ]]> 兼容AMD,nodejs/commonjs规范的模块定?读knockoutjs源码 http://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html衡锋 衡锋 Sat, 18 Aug 2012 08:51:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html http://www.tkk7.com/Hafeyang/comments/385734.html http://www.tkk7.com/Hafeyang/archive/2012/08/18/compatibility_with_AMD_and_commonjs_module_definition_exaction_of_knockoutjs_sourcecode.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/385734.html http://www.tkk7.com/Hafeyang/services/trackbacks/385734.html 从knockoutjs源码中读C一个很好的能兼容AMD,commonjs规范的模块定义。看代码
/ 闭包执行一个立卛_义的匿名函数 ! function (factory) { // factory是一个函敎ͼ下面的koExports是他的参数 // Support three module loading scenarios if ( typeof require === ' function ' && typeof exports === 'object' && typeof module === 'object') { // [1] CommonJS/Node.js // [1] 支持在module.exports.abc,或者直接exports.abc var target = module['exports'] || exports; // module.exports is for Node.js factory(target); } else if ( typeof define === ' function ' && define['amd']) { // [2] AMD anonymous module // [2] AMD 规范 // define(['exports'],function(exports){ // exports.abc = function(){ } // }); define(['exports'], factory); } else { // [3] No module loader (plain <script> tag) - put directly in global namespace factory(window['ko'] = {}); } }( function (koExports){ // ko的全局定义 koExports是undefined 对应着上面的[3] q种情况 var ko = typeof koExports !== 'undefined' ? koExports : {}; // 定义一个ko的方?/span> ko.abc = function (s){ alert(s); } }); // [3]中情늚调用 ko.abc( " msg " ); 非常巧妙的闭包实C。三U方式的兼容。摘出来mark一下?br /> ]]> sublime text 2 学习(一)Q快捷键Q小技巧for前端工程师(持箋更新Q?/title> http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html衡锋 衡锋 Thu, 09 Aug 2012 05:22:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html http://www.tkk7.com/Hafeyang/comments/384754.html http://www.tkk7.com/Hafeyang/archive/2012/08/09/sublime_text_2_short_key_and_trick_for_frontend_engineer.html#Feedback 5 http://www.tkk7.com/Hafeyang/comments/commentRss/384754.html http://www.tkk7.com/Hafeyang/services/trackbacks/384754.html Ctrl+W 关闭当前늭Q很通用?br />Ctrl+Shift+W关闭所有页{,估计能猜到?br /> Ctrl+Shift+v _脓(chung)q且格式化,比较实用?br /> Ctrl+[ 减少~进 Ctrl+] 增加~进 Ctrl+k,Ctrl+u 先按Ctrl+K,再按Ctrl+UQ大写,q有点不习惯 Ctrl+k,Ctrl+l 写 ctrl+left,ctrl+right 先左/右移动一个单词,VI中的W,B Ctrl+Shift+up ,当前上上UM行,跟Eclipse一?br />Ctrl+Shift+downQ不说了 Ctrl+Shift+K 删除当前选中行,后来发现Ctrl+X也可以,Eclipse里面的Ctrl+D?br />Ctrl+Shift+D 复制当前选中行,E序员的挚爱 Ctrl+D 是高亮光标所在词Q类似VIM中的# Ctrl+M 到匹配的{[( 与vim 中的%一?br />Ctrl+Shift+M 可以选中{[(内容Q类似vim中的va( vi{ Ctrl+J join rows 合ƈ选中?br />Ctrl+Shift+J 打散?br /> Ctrl+Shift+T 旋{功能q个标签内容 vim中的vat Ctrl+shift+a 选中匚w的标{?br /> Ctrl+T 可以选中多行Q然后讲q些行顺序反转。如果没有选中多行Q会讲光标前后的字母换顺序?br /> 双击选中一个单?Ctrl+F3跌下一个匹配处QF3上一个匹配处?br /> F11Q我最喜欢的全屏快捷键?br />Shift+F11更狠Q只~辑当前的文件。免打扰模式。两x静?br /> alt+. 如果输入<div> 然后alt+. 可以自动完成q个tagQ变?lt;div></div> Ctrl+/ Ctrl+Shift+/ 注释/取消注释Q各U语a都行?br /> 一个小技巧:选中一个单词如abc Q然后输? q样 会变?abc",同理q可以用( { [ ' Ctrl+shift+P 调出一个功能列表,可以探烦一些好玩的功能Q比如我扑ֈ了这个功能:HTML:Encoding Special Characters。选中 & q行一下可以变?& Ctrl+P 会调Z个对话框框,下拉选项中有当前打开的文Ӟ可以切换Q文本框非常强大Q输入@funcName 可以直接到函数定义处Q输?key 可以直接查找Q输?行数可以直接到某行,也可以用快捷键Ctrl+g 安装了ZenCoding之后可以使用的快捷键Q?安装教程 Ctrl+alt+Enter,zencoding开始了 alt+shift+W 环绕选中内容 官方文档中有快捷键列表:http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html ]]> 谈谈前端lg?/title> http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html衡锋 衡锋 Tue, 31 Jul 2012 17:19:00 GMT http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html http://www.tkk7.com/Hafeyang/comments/384477.html http://www.tkk7.com/Hafeyang/archive/2012/08/01/how_to_build_frontend_component_lib.html#Feedback 0 http://www.tkk7.com/Hafeyang/comments/commentRss/384477.html http://www.tkk7.com/Hafeyang/services/trackbacks/384477.html
1.基础库:
注意是库Q不是框Ӟ基础库通常提供底层Ҏ(gu)Q它必须能够屏蔽览?l端的API差异。也许大家脑子里面会弹出一堆前端热门的一些库。在此不讨论哪个库哪个库怎么P一个基库必L供的功能Q?br />
基本cd的常见扩展:原生的javascript对象API往往在现实中不够用,比如常见的Array.indexOf/remove/eachQDate.parse/formatQ不是怎么装都需要这cL?/li>
DOM操作常见Ҏ(gu)QDOM节点增删Ҏ(gu)QCSS selectorQDOMReadyQcontainsQadd/remove/toggleClassQ屏蔽浏览器之间的操作差异。不多说Qh人都熟?/li>
一套浏览器机Ӟ以前大家都們于做览器类型和版本的检,现在們于做览器的Ҏ(gu)检,q样更有实际用处?/li>
Ajax的封装,对于lg库来讲可无。毕竟组件库本n的实C太会用得上Ajax?/li>
2.事g机制Q?br />
addEventListener/removeEventListener/dispatchEvent 是常见的装方式Q不应该只是DOM事gQ而是M对象都可以做一个事件机制?br />
对于DOM事g的封装需要屏蔽IE/标准Event的差异提供ؓ用户使用Q事件代理非帔R要,不可视?br />
事g机制都无一例外的是ZW三方观察者或者叫做沙?Sandbox)实现?/li>
事g机制更深的功能是提供一个模块的通信机制?/li>
对于lg库,lg实例之间的通信更加重要Q组件实例之间最好不要存在相互引用的关系Q互怸能感知对方的存在Q有了事件机Ӟ可以通过W三Ҏ(gu)效的通知lg实例Q减组件实例间的耦合?
3.模板机制Q?br />
实际上写lg的时候,Dhtml是一件很复杂的事情,模块能够从数据模型,对于lg库来讲通常是配|信息选项。将q些选项D成html字符丌Ӏ但是大家普遍的一个误区是在追求语法的便的和性能。我倒觉得模板要做的事情q不止如此。功能强大的模板不仅仅只完成字符串的拼接Q而是要简化整个DOM操作Q从数据模型到DOM的双向绑定,Model更新了DOM也随之更新。甚臌解决动态DOM事gl定的问题?br />
4.面向对象的机?br />
攑֜lg库这个角度去谈面向对象的时候,他是一个架构设计中的一个重要的一环?br />
面向对象的机制能有效的提升代码的可复用性和扩展性,javascript灉|的语法诸如prototype/closure的方式,能构建出一个强大的cd?br />
可以使用l承机制扩展已有的组件。也可以用引用的方式装饰(Facade)现有lgQ个人更們于用装饰。因为承M不可避免的直接或者间接去讉K父类的一些私有属性方法?br />
q个机制其实军_了一个组件的代码模型Q通常需要解决的问题有:
该组件承自哪些lg或者基c,或者依赖于那些c?
lg实例的管理方式,因ؓ每个lg实例都需要在一个容器中l一存放Q理想的的存放模型应该是树Ş的,在内存中存在cMDOM树一Llg对象树,是否可以通过cd扑ֈ相关实例Q根据ID获取实例Q获取子实例Q父实例Q父/子实例之间的通信父实例的resize是否能通知容器内的实例resize?/li>
插g机制Q作Z个非帔R要的扩展机制Q插件能有效的解决组仉的复用部分,通常q部分会叫做行ؓ(behavior)Q对于组件不能提供的甚至是个性化的功能,有没有提供有效的Q够多的扩展点?/li>
提供怎样的实例化方式Q?new XXX() ?? q是cMDOM的操作方式appendInstance??甚至有类似jqq种铑ּ。我更觉得应该用appendInstance的方式,q样能更加有效的体现lgCZ间的?子关pR就像DOM操作一P最l组件实例也是树形结构,如果我们直接new XXX() q种方式Q其实相当于声明了一个游L的 DOM节点。实际我写代码的时候发现要理q些lg实例也是比较ȝ的地方,试想一个页面如果有多个lg实例Q需要声明多个实例变量Q或者申明多个对象d放这些实例?/li>
lg提供的APIQ一个组件对外暴露的API会包括初始构造方法,公共Ҏ(gu)(method)Q事?event)Q对于eventQ提供怎样的eventData也非帔R要?
5.模块化机?br />
如今模块化的思想已经深入人心Q模块化带来了很好的团队多h完成一大的Q务的可能性,W合高内聚低耦合的思想。到了如今这个时代,万物皆模块?br />
lg库通常是一个庞大的工程Q单靠个雄主义很隑ց的完整全面?br />
详细的来Ԍ模块化机制涉及:
模块本n的定义,注册Q直接媄响一个组件的代码模型Q一个组件是一个模块?/li>
模块的依赖申明以及追朔机Ӟ像前面提到的,依赖于那些类Qcss文gQ资源,数据。不仅仅需要声明,q应该可q朔Q依赖的父类Q也能找到父cLw所依赖的资源,q样为按需部v打包Q在U调试提供居多方ѝ?/li>
加蝲机制Q因为在开发阶D要么放一个整个组件库代码Q要么是通过一个加载器按需加蝲Q到了线上希望只部v引用C模块lgQ这样可以减实际部|的文g大小。加载机制会涉及到浏览器的javascript/css文g的加载,其是需要尽可能的ƈ行下载而且按照依赖关系先后执行。包括应用模块,可以方便的通过q种加蝲机制延迟Q按需Q按时的加蝲到页面中?/li>
打包部v机制Q由于依赖可q朔Q这样实际项目中用到的那些组件可以分析出来,最l可以根据实际用到的情冉|包出适合大小的组件库Q减冗余包的存在?/li>
模块间的通信机制Q由于模块减轻耦合甚至是独自孤立存在,lg之间的通信非帔R要,比如通常一个页面上面的菜单lg实例点击需要触发下面组件的更新。如果直接监听菜单事件去更新下面的组Ӟ也许菜单是每个页面都有。但是下面的lg不是每个面都有Q这L事g监听显然耦合较重Q互怾赖对方的存在。如果菜单点击这是告诉第三方我被点击了。下面的lg只去监听W三方的事gQ这L代码思\明显要好q很多?
需要再ơ强调的是万物皆模块Q这意味着通用lg本n实现是一个模块,实际应用场景中的业务模块也是模块Q都需要遵守模块的U定?br />
6.前端的基本开发思想
取决于个人经验:比如MVC的思想在组件实现过E中非常重要QModel通常是构造函C那一堆配|信息,View通常是需要通过Model提供数据用户呈现Q实际上View上的操作的相应都需要Model来记住状态。Controller用于操作二者。原理大安知道Q在开发中怎样分清三者界限。保证思\清晰?br />
前端中javascript/css/html的角色也cM与MVC。下面的一些代码方式就有违MVC的一些思想Q?br/>
css Expression:不仅IE onlyQ更重要是CSS中写javascriptq个风格不对Q难以维护?/li>
javascript直接修改style.xxx='xx'。能写成css class的最好都写成css class?/li>
html中直接写onxxx="foo()"Q没有h能保证fooҎ(gu)存在不被修改?/li>
7.其他需要考虑的问题:
试用例Q通用lg库是一个庞大的工程Q也许牵一发动全nQ不知道哪个API的变动会影响多少调用者,有充的单侧用例Q一定程度上能保证整个组件库的稳定性?/li>
_度Q粒度是一个很值得思考的问题Q其实html的标{֏以当做是一个小的组Ӟ只是因ؓ_度很小Q要完成一个复杂的应用Q有很多的可复用lg都需要用到大片大片的重复html片段。另外一个极端,我们我们把整个页面都写成一个组Ӟ昄没有复用性,跟没装一栗所以选择一个合适的lg_度Q一个组件完成特定的功能Q有利于搭徏出有惌力的应用?/li>
一致性:需要有很好的代码规范和U定。才能保证API的一致性,用户也会理所当然的想到怎样用APIQ降低学习成本,一个最常见的例子就事g监听的参敎ͼl一?eventObject,eventData)?/li>
文档&Demo:q个不用多说Q没有文档和demo的东西没有hȝ代码怎么使用?/li>
性能QDOM操作是组件库的性能杀手,高效的DOM操作其重要Q事件监听也是非常耗时的,能采用代理的都用父节Ҏ(gu)代理?/li>
资源释放Q组件的资源Q引用是否能完全释放Q尤其是开发SPAQ组件的资源内存释放非帔R要了?
ȝQ?br />
雉星星的提Cq么几点Q也是过d作中的体会,当然会有不Q望大家补充Q回头可以check一下现在用到的一些框?lg。欢q讨论?
]]> 使用div模拟出frameset效果 http://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.html衡锋 衡锋 Fri, 17 Jun 2011 04:26:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.html http://www.tkk7.com/Hafeyang/comments/352501.html http://www.tkk7.com/Hafeyang/archive/2011/06/17/div_as_frameset.html#Feedback 5 http://www.tkk7.com/Hafeyang/comments/commentRss/352501.html http://www.tkk7.com/Hafeyang/services/trackbacks/352501.html 阅读全文 ]]> 使用正则替换textareaU的重复?/title> http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html衡锋 衡锋 Fri, 17 Jun 2011 04:16:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html http://www.tkk7.com/Hafeyang/comments/352500.html http://www.tkk7.com/Hafeyang/archive/2011/06/17/remove_duplicate_rows_in_textarea_using_regular_expression.html#Feedback 3 http://www.tkk7.com/Hafeyang/comments/commentRss/352500.html http://www.tkk7.com/Hafeyang/services/trackbacks/352500.html 阅读全文 ]]> textarea高度自动增加 http://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html衡锋 衡锋 Sun, 15 May 2011 11:40:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html http://www.tkk7.com/Hafeyang/comments/350286.html http://www.tkk7.com/Hafeyang/archive/2011/05/15/auto_height_of_textarea.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/350286.html http://www.tkk7.com/Hafeyang/services/trackbacks/350286.html
最初看到这个命题,觉得不是不是直接监听事g然后设计高度么?于是我想当然的写了这么一D代码:
< script type ="text/javascript" >
function autoheight() {
this .height = this .scrollHeight + this .height + " px " ;
}
</ script >
< textarea id ="" rows ="" cols ="" onpropertychange ="autoheight();" oninput ="autoheight()" style ="overflow:hidden;" ></ textarea >
q个代码我没有运行,因ؓ一边写发C对劲Q在propertychange函数中改变property会再ơ触发propertychange事gQ结果就可想而知了。stack overflow?/p>
所以需要换一U思\Q新Z个textareaQ将同样大的文本攑ֈ属性一Ltextarea中计其高度Q然后把高度讄到目标textarea中?/p>
< script type ="text/javascript" >
// 基本函数*2
var addHandler = window.addEventListener ?
function (elem,event,handler){elem.addEventListener(event,handler);}:
function (elem,event,handler){elem.attachEvent( " on " + event,handler);};
var $ = function (id){ return document.getElementById(id);}
function autoTextArea(elemid){
// 新徏一个textarea用户计算高度
if ( ! $( " _textareacopy " )){
var t = document.createElement( " textarea " );
t.id = " _textareacopy " ;
t.style.position = " absolute " ;
t.style.left = " -9999px " ;
document.body.appendChild(t);
}
function change(){
$( " _textareacopy " ).value = $(elemid).value;
$(elemid).style.height = $( " _textareacopy " ).scrollHeight + $( " _textareacopy " ).style.height + " px " ;
}
addHandler($( " target " ), " propertychange " ,change); // for IE
addHandler($( " target " ), " input " ,change); // for !IE
$(elemid).style.overflow = " hidden " ; // 一处隐藏,必须的?/span>
$(elemid).style.resize = " none " ; // Ltextarea能拖拽放?~小高度/宽度功能
}
addHandler(window, " load " , function (){
autoTextArea( " target " );
});
</ script >
< textarea id ="target" rows ="" cols ="" ></ textarea >
搞清楚原理其实就单多了。要捕捉textarea的change事g在IE下可以用propertychange,?IE下可以用input?/p>
一些textarea资料做参考:
textarea 的一些小技?http://css-tricks.com/textarea-tricks/
本文的直接资料来源:http://www.planeart.cn/?p=1489
]]>jQuery中的stopImmediatePropagation与stopPropagation的区?/title> http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html衡锋 衡锋 Fri, 06 May 2011 10:04:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html http://www.tkk7.com/Hafeyang/comments/349697.html http://www.tkk7.com/Hafeyang/archive/2011/05/06/stoppropagataion_vs_stopimmediatepropagation.html#Feedback 2 http://www.tkk7.com/Hafeyang/comments/commentRss/349697.html http://www.tkk7.com/Hafeyang/services/trackbacks/349697.html
< script type ="text/javascript" >
$(function (){
$( " #t " ).keyup( function (e){
$( " #s " ).html( " keyup1 " );
// stopImmediatePropagation可以L在这之后l定的事?/span>
// 比较注释和不注释q一行的区别
e.stopImmediatePropagation();
});
$( " #t " ).keyup( function (e){
$( " #s " ).html( " keyup2 " );
});
});
</ script >
< input type ="text" id ="t" name ="" value ="" />
< span class ="" id ="s" ></ span >
如果在第一个事件中需要阻止第二个事g的执行可以在W一个事件中使用event.stopImmediatePropagationҎ(gu)。jQuery的event的对象是增强的event对象Q?br />
stopImmediatePropagation是jQuery独有的一U阻止jQueryl定事g机制。可以通过
isImmediatePropagationStopped() 来判断是否阻止了jQuery立即冒?/div>
stopImmediatePropagation的实现可以参见我之前的一文章,
从jQuery的缓存到事g监听
在这文章中提到jQuery事仉~存在一个数l中按照先后序执行。如果stopImmediatePropagation停止执行数l中的监听函数?/div>
stopPropagation是阻止默认事件监听函数。不是jQuery独有Q阻止默认事件的冒Q比如监听了DOM节点和该节点的父节点的事Ӟ默认是事件执行将从里到外Q这是所谓的冒。在IE9-览器中可以使用event.cancelBubble=false来做刎ͼ标准览器用event.stopPropagationҎ(gu)。jQuery也把stopPropagation扩展方式到IE上这h了一致的Ҏ(gu)?/div>
lg所qͼ其实stopImmediatePropagation与stopPropagation׃是一个东西,所以也不存在什么区别了?/div>
参考资?/div>
http://api.jquery.com/event.stopImmediatePropagation/
http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation
http://api.jquery.com/event.stopImmediatePropagation/
http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation
]]>
jQuery中的delegate与live实现方式?/title> http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html衡锋 衡锋 Tue, 19 Apr 2011 04:07:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html http://www.tkk7.com/Hafeyang/comments/348563.html http://www.tkk7.com/Hafeyang/archive/2011/04/19/the_implementation_of_jquery_delegate_and_live.html#Feedback 3 http://www.tkk7.com/Hafeyang/comments/commentRss/348563.html http://www.tkk7.com/Hafeyang/services/trackbacks/348563.html 阅读全文 ]]> datagrid性能Q一Q:性能问题何来Q?/title> http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html衡锋 衡锋 Tue, 18 Jan 2011 02:25:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html http://www.tkk7.com/Hafeyang/comments/343131.html http://www.tkk7.com/Hafeyang/archive/2011/01/18/the_performance_challenge_of_datagrid_you_may_face.html#Feedback 5 http://www.tkk7.com/Hafeyang/comments/commentRss/343131.html http://www.tkk7.com/Hafeyang/services/trackbacks/343131.html 阅读全文 ]]> javascript解析q铺树Ş数据 http://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html衡锋 衡锋 Thu, 13 Jan 2011 08:40:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html http://www.tkk7.com/Hafeyang/comments/342937.html http://www.tkk7.com/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/342937.html http://www.tkk7.com/Hafeyang/services/trackbacks/342937.html 阅读全文 ]]> 从jQuery的缓存到事g监听 http://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html衡锋 衡锋 Tue, 04 Jan 2011 07:20:00 GMT http://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html http://www.tkk7.com/Hafeyang/comments/342286.html http://www.tkk7.com/Hafeyang/archive/2011/01/04/jquery_cache_and_events_bind.html#Feedback 5 http://www.tkk7.com/Hafeyang/comments/commentRss/342286.html http://www.tkk7.com/Hafeyang/services/trackbacks/342286.html 阅读全文 ]]> 怎样高效的批量删除javascript 数组中的元素Q?/title> http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html衡锋 衡锋 Wed, 29 Dec 2010 07:58:00 GMT http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html http://www.tkk7.com/Hafeyang/comments/341917.html http://www.tkk7.com/Hafeyang/archive/2010/12/29/how_to_batch_remove_items_in_javascript_array.html#Feedback 4 http://www.tkk7.com/Hafeyang/comments/commentRss/341917.html http://www.tkk7.com/Hafeyang/services/trackbacks/341917.html 阅读全文 ]]> iframe的readyState http://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html衡锋 衡锋 Sun, 12 Dec 2010 08:34:00 GMT http://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html http://www.tkk7.com/Hafeyang/comments/340397.html http://www.tkk7.com/Hafeyang/archive/2010/12/12/readyState_property_of_iframe.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/340397.html http://www.tkk7.com/Hafeyang/services/trackbacks/340397.html 阅读全文 ]]> javascript == === 陷阱&不解 http://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html衡锋 衡锋 Fri, 29 Oct 2010 09:32:00 GMT http://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html http://www.tkk7.com/Hafeyang/comments/336504.html http://www.tkk7.com/Hafeyang/archive/2010/10/29/confused_of_javascript_equal.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/336504.html http://www.tkk7.com/Hafeyang/services/trackbacks/336504.html
alert(0 == "" ); // true
alert( 0 == " 0 " ); // true
alert( 0 === " 0 " ); // false
alert( null == 0 ); // false
alert(undefined == null ); // true
alert(undefined === null ); // false
alert( " true==\ " true \ " : " + ( true == " true " )); // false
alert( " false==\ " false \ " : " + ( false == " false " )); // false
NaN有点特例Q?br />
alert(NaN == NaN); // false
alert(NaN == undefined); // false
alert(NaN == null ); // false
Ҏ(gu)下面q段介绍
== equality {同Q?== identity 恒等?/p>
==Q?两边值类型不同的时候,要先q行cd转换Q再比较?span class="Apple-converted-space">
==Q不做类型{换,cd不同的一定不{?span class="Apple-converted-space">
下面分别说明Q?span class="Apple-converted-space">
先说 ===Q这个比较简单。下面的规则用来判断两个值是?==相等Q?span class="Apple-converted-space">
1、如果类型不同,[不相{]
2、如果两个都是数|q且是同一个|那么[相等]Q?Q例?的是Q如果其中至一个是NaNQ那么[不相{]。(判断一个值是否是NaNQ只能用isNaN()来判断)
3、如果两个都是字W串Q每个位|的字符都一P那么[相等]Q否则[不相{]?span class="Apple-converted-space">
4、如果两个值都是trueQ或者都是falseQ那么[相等]?span class="Apple-converted-space">
5、如果两个值都引用同一个对象或函数Q那么[相等]Q否则[不相{]?span class="Apple-converted-space">
6、如果两个值都是nullQ或者都是undefinedQ那么[相等]?span class="Apple-converted-space">
再说 ==Q根据以下规则:
1、如果两个值类型相同,q行 === 比较?span class="Apple-converted-space">
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型{换再比较Q?span class="Apple-converted-space">
a、如果一个是null、一个是undefinedQ那么[相等]?span class="Apple-converted-space">
b?em>如果一个是字符Ԍ一个是数|把字W串转换成数值再q行比较?span class="Apple-converted-space">
c、如果Q一值是 trueQ把它{换成 1 再比较;如果M值是 falseQ把它{换成 0 再比较?span class="Apple-converted-space">
d、如果一个是对象Q另一个是数值或字符Ԍ把对象{换成基础cd的值再比较。对象{换成基础cdQ利用它的toString或者valueOfҎ(gu)?js核心内置c,会尝试valueOf先于toStringQ例外的是DateQDate利用的是toString转换。非js核心的对象,令说Q比较麻 烦,我也不大懂)
e、Q何其他组合,都[不相{]?span class="Apple-converted-space">
不理解的是斜体加_的部分: 如果是一个字W串与数值比较,字W串转化成数值比较?
alert(parseInt( "" , 10 )); // NaN
alert( 0 == "" ); // true
不管怎么?=="" true 是没有道理的。就因ؓq个问题让我׃好久去解bug?
]]>
javascript获取/讄 文本?文本域中的光标位|?/title> http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html衡锋 衡锋 Mon, 27 Sep 2010 09:36:00 GMT http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html http://www.tkk7.com/Hafeyang/comments/333074.html http://www.tkk7.com/Hafeyang/archive/2010/09/27/333074.html#Feedback 1 http://www.tkk7.com/Hafeyang/comments/commentRss/333074.html http://www.tkk7.com/Hafeyang/services/trackbacks/333074.html <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > javascript获取/讄 文本?文本域中的光标位|?/span></ title >
< meta name ="Keywords" content ="" />
< meta name ="Description" content ="" />
< meta http-equiv ="X-UA-Compatible" content ="IE=EmulateIE7" />
< script type ="text/javascript" >
function getTxt1CursorPosition(){
var oTxt1 = document.getElementById( " txt1 " );
var cursurPosition =- 1 ;
if (oTxt1.selectionStart){ // 非IE览?/span>
cursurPosition = oTxt1.selectionStart;
} else { // IE
var range = document.selection.createRange();
range.moveStart( " character " , - oTxt1.value.length);
cursurPosition = range.text.length;
}
alert(cursurPosition);
}
function setTxt1CursorPosition(i){
var oTxt1 = document.getElementById( " txt2 " );
var cursurPosition =- 1 ;
if (oTxt1.selectionStart){ // 非IE览?/span>
oTxt1.selectionStart = i;
} else { // IE
var range = oTxt1.createTextRange();
range.move( " character " ,i);
range.select();
}
}
function getTa1CursorPosition(){
var evt = window.event ? window.event:getTa1CursorPosition.caller.arguments[ 0 ];
var oTa1 = document.getElementById( " ta1 " );
var cursurPosition =- 1 ;
if (oTa1.selectionStart){ // 非IE览?/span>
cursurPosition = oTa1.selectionStart;
} else { // IE
var range = oTa1.createTextRange();
range.moveToPoint(evt.x,evt.y);
range.moveStart( " character " , - oTa1.value.length);
cursurPosition = range.text.length;
}
alert(cursurPosition);
}
function setTa1CursorPosition(i){
var oTa2 = document.getElementById( " ta2 " );
if (oTa2.selectionStart){ // 非IE览?/span>
oTa2.selectionStart = i;
oTa2.selectionEnd = i;
} else { // IE
var range = oTa2.createTextRange();
range.move( " character " ,i);
range.select();
}
}
</ script >
</ head >
< body >
< input type ="text" id ="txt1" name ="" value ="点击我获取光标位|? onkeyup ="getTxt1CursorPosition()" onclick ="getTxt1CursorPosition()" />
< input type ="text" id ="txt2" name ="" value ="点击我设|光标位|ؓ5" onclick ="setTxt1CursorPosition(5)" />
< hr />
< textarea id ="ta1" rows ="" cols ="" style ="width:100%; height:90px;" onclick ="getTa1CursorPosition()" > abcdefg
hijklmn
opqrst
uvwxyz
点击我获取文本域的光标位|?/span></ textarea >
< textarea id ="ta2" rows ="" cols ="" style ="width:100%; height:90px;" onclick ="setTa1CursorPosition(30)" > abcdefg
hijklmn
opqrst
uvwxyz
点击我设|文本域的光标位|ؓ30 </ textarea >
</ body >
</ html >
]]>
解决IE下javascript:void(0)会触发window.onbeforeunload事g http://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html衡锋 衡锋 Tue, 27 Apr 2010 02:01:00 GMT http://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html http://www.tkk7.com/Hafeyang/comments/319445.html http://www.tkk7.com/Hafeyang/archive/2010/04/27/fix_anchor_of_href_javascript_void_trigger_window_onbeforeunload_event_at_IE.html#Feedback 2 http://www.tkk7.com/Hafeyang/comments/commentRss/319445.html http://www.tkk7.com/Hafeyang/services/trackbacks/319445.html 先看看问题现?/p>
< script type = " text/javascript " >
window.onbeforeunload= function ()
{
alert( " onbeforeunload event " );
// return false;
}
</ script >
< a href = " # " onclick = " return true; " > 试1 </ a >< br />
< a href = " javascript:void(0) " onclick = " return true; " > 试2 </ a >< br />
< a href = " javascript:void(0) " onclick = " return false; " > 试3 </ a >< br />
< a href = " javascript:void(alert('test 4 .')) " onclick = " return true; " > 试4 </ a >< br />
< a href = " javascript:void(alert('test 5 .')) " onclick = " return false; " > 试5 </ a >< br />
IE?"试4"Q?试5"会触发window.onbeforeunload事g。这是因?span style="font-size: 14px; line-height: 21px; font-family: verdana, sans-serif">Q点M件触发的时候(调用序Qonclick->window.onbeforeunload->href Q?/span>
实际使用的时候还是尽量避免用javascript:void(0)q样的写?可以使用 <a href="###"></a>可以防止锚点Q但是如果已l写了。可以用jQuery的liveҎ(gu)解决Q?/span>
jQuery 1.3中新增的Ҏ(gu)。给所有当前以及将来会匚w的元素绑定一个事件处理函敎ͼ比如click事gQ。也能绑定自定义事g?/p>
目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup?nbsp;
q不支持 blur, focus, mouseenter, mouseleave, change, submit
与bind()不同的是Qlive()一ơ只能绑定一个事件?/p>
q个Ҏ(gu)跟传l的bind很像Q区别在于用live来绑定事件会l所有当前以及将来在面上的元素l定事g(使用委派的方?。比如说Q如果你l页面上所有的li用livel定了click事g。那么当在以后增加一个li到这个页面时Q对于这个新增加的liQ其click事g依然可用。而无需重新l这U新增加的元素绑定事件?/p>
.live()与流行的liveQuery插g很像Q但有以下几个主要区别:
.live 目前只支持所有事件的子集Q支持列表参考上面的说明?
.live 不支持liveQuery提供?#8220;无事?#8221;样式的回调函数?live只能l定事g处理函数?
.live 没有"setup"?cleanup"的过E。因为所有的事g是委z而不是直接绑定在元素上的?
要移除用livel定的事ӞLdieҎ(gu)?/p>
具体的解决代码ؓQ?/p>
// IE javascript:void(0)会触发window.onbeforeunload事g
if (document.all){
$( " a[href='javascript:void(0)'] " ).live( " click " , function (e){
e.preventDefault();
});
}
使用liveҎ(gu)对于新增?lt;a href="javascript:void(0)"></a>仍有效,使用例如jQuery datepick会动态的生成很多q样a标签Q用上q方法可以很好的解决q个问题
]]> 企业Ub/s应用pȝ采用怎样的javascript框架 http://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.html衡锋 衡锋 Sun, 12 Apr 2009 09:25:00 GMT http://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.html http://www.tkk7.com/Hafeyang/comments/265142.html http://www.tkk7.com/Hafeyang/archive/2009/04/12/265142.html#Feedback 7 http://www.tkk7.com/Hafeyang/comments/commentRss/265142.html http://www.tkk7.com/Hafeyang/services/trackbacks/265142.html 在过ȝ很长的一D|_我都从事b/s应用pȝ开发,我要做的事情是怎样做界面规范以保证UI风格l一Q同时保证开发的高效性。具体而言Q我要做的工作需要把css写好Q开发者做界面时能方便的写html和样式。可更多的经历我都花在javascript上?/p> 问题一Q要不要采用javascript框架Q?/p>
我刚到公司的时候,我们的技术架构师是不同意使用javascript 框架。理由很多,javascript 没有得到应有的重视是主要的原因,他一直强调我们做的是应用pȝ。所以他只在|上扑ֈ几个js攑֜目下面Q然后页面上很ؕQ要写一颗树展现真是ȝ又麻烦。而且大家的javascript水^都很一般,基本只是E微了解一炏V用的最多的q是数据校验Q写的方法还是document.form1.formname,document.add['id']之类的写法。这让我q个天天x界面的技术h?冒昧自称技术h员,其实只是在界面层上有点研I而已)真是抓狂。很讽刺的是Qؓ了用一个小H口弹出错误信息Q把jqeury+ui搬出来。整个项目也只有q么一个地方用到jquery,d的时候jquery的h气正在攀升。我来了之后Q由于自p分小Q在技术上说不上话Q后来大家界面上开发的时候遇到这个那个问题解决不了的时候,大家慢慢的认识到了我的h(hun)倹{新的项目领D我负责界面规范这块,公司也想把这个项目做成一个品。经q很多次“力荐”,我终于说服了大家Q我们不能再"IE only" 了?/p>
我认Z用的理由Q?一Q我们要有兼容各U浏览器的能力,现在新的览器大战正在打响,来的浏览器市场q很难说。在cssq方?我借鉴了ext 的兼Ҏ(gu)想Q在body标签上加上class "IE IE6",q样我们不要使用hack dҎ(gu)览器了。对于javascript上,基本上只有IE和非IE的差别了。主的javascript框架都提供了很好的浏览器支持。二Q用javascript框架的目的是提高开发效率。这与主的javascript不谋而合。三Qweb应用正在飞速发展,界面层应用越来越复杂Qjavascript不在一个校验数据的脚本了,ajax的应用能很好的提升用户体验,有些场合使用ajaxQ用h作更加方ѝD个很单的例子Q很多的记录需要排序,虽然在数据上来看Q只要改变排序D解决问题Q但在界面上Q难道要用户d写排序|q样用户会觉得很难操作,而用上sortableQ这个问题不仅简单,而且操作h不知道清晰多。我们从传统的c/s走到b/s不仅是因为b/s 不需要安装,升Ҏ(gu)。还是因为b/sh更前的表现力?/p>
当然Q反对用javascript框架的理׃很尖锐。一Q开发h员的水^很难以掌握现有的javascript框架。二Q大家坚持认为,其实现在用的javascript的地方还不是很多。从需求上屈指可敎ͼtree,borderlayout,grid,calendar?/p>
Ҏ(gu)Q我提出的想法就是,大家如果觉得难以使用的话Q我在javascript框架上做一ơ封装,降低使用隑ֺ。第二个理由更好_虽然现在使用的地方就那么几个Q那好,你能拿出更好的方案么。曾l架构师_我们希望每一个界面控仉是单独的Q能单独使用。当然现在的Ljavascript 都是q样的。这P我就在大家仍用怀疑的眼光注视我的时候开始了javascript框架之旅?/p>
问题二:用哪个javascript框架Q?/p>
q个问题不是在讨论或者争执哪个好哪个不好Q未免大家再又争执,我让他们自己找javascript框架Q甚臛_以把他们最熟?zhn)的拿出来使用。大伙都说没有时_q样我也不担心有后话了?/p>
我把目前L的javascript分ؓ三类?/p>
诸如Qprototype/jquery/mootoolsq样的javascript框架Q只能是javascript工具。他的优势就是扩展性强Q社区支持很好,其是jquery
W二cd是:yui/ext/dojo/qooxdooq样的框架。他们是一套全pd的纯客户端的ui解决Ҏ(gu)Q用方便,能满x们的需要。缺Ҏ(gu)入口很高Q适用于做富客L。虽然我们现在的应用q是很多Q但是还没有到那个地步?
q有一cd是与服务器端技术结合的ajax框架Q他只能叫ajax框架,他基本只做数据交换。事实上只要做一个简单的servlet(j2ee)或者HttpHanlder(.Net)再在客户端加以封装,使用h也是很方便的。所以这cajax框架我认Z需要考虑?
在我看来Qƈ不是那个框架l对的好坏,而是什么样的框架能最好的满你的需求?
Z人阅历上来讲Q三cȝ多个框架我都知道一二。但是我最喜欢jquery,所以用了jquery了,他的好处是轻量U,扩展性强Q现有的插g以满需要。代码非常简介而且执行效率高。于是我找了一大堆jquery插g。再自己装城稍微简单的Ҏ(gu)。本着不重复发明轮子的原则。很多的界面问题都能解决了?
问题三:真的是那样么Q?
时至2009,目完了Q到了需要再ơ封装城产品的时候,ȝ也就来了。我发现虽然jquery插g很多Q很全,但是׃是百花齐放,我就不想修改里面的代码。慢慢的使用发现很多插g不是很稳定,像jstree,jquery ui ׃先前用的版本比较低,D很有的bug自己写一些修正。现在回q头来看那时候做的东西,发现新的版本已经修复了这些功能。而换上新版本的jqueryQ变化还是蛮多,比如jquery.browser׃推荐使用了,怎么办?
来?
本文是在用jquery之后Q发现维护工作量也不的背景下写下来的。我不知道是不是我当初选择jquery是错误的。是不是应该选择ext 之类的有着更强表现能力Q更E_的框架么Q现在的代码q是不是那么理想。由于很多的历史原因Q大家还在用ecside Qjscalendar。用ecside是因为历史原因。用jscalendar是因为jqueryq没有一个日历控件能支持旉的。我一个h的精力有限,而且我很多的旉都在写项目代?说到底还是领g重视)。我担心我当时做的决定会对将来造成负面影响?
冒昧发在首页上,真诚的希望大家提q看法Q在企业U应用系l上界面层应该怎样做,文中的有些观点如有不对的地方q请大家指教
]]>
վ֩ģ壺
avһ |
av߹ۿ |
ȫƵѸ |
˳߹ۿ69ʽСƵ |
þѶƷ˾ |
ѹƵ |
ҹѸþӰԺ |
þþþùƷվ |
þaaëƬѲŰ |
99þþùƷ |
ĻmvѸ
|
Ʒ91ר
|
ƷɫƬۿ |
Ļþи |
ձһ |
AVר߲ |
ߵӰ |
av |
߹ۿר |
պ߹ۿƵ |
APPѹۿƵ |
ÿĻ2019 |
߹͵Ʒ |
ձһһѿ |
ҹƷһ8050 |
Ʒmv߹ۿ |
ۺþþ |
պһ
|
þþþƷӰ |
˻ɫַ |
ѿavһ |
Ƭѹۿ92ƵƵ
|
ѿŮҹƬ |
þþƷѿ |
ŷaѹۿ |
רƵ |
av뾫Ʒվ
|
һ |
2020þþƷۺһ |
鶹ȫַ |
99ƵƷר |