手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Javascript

取消radio的选中状态

一个简单的例子,是懒宝宝让我帮忙的。因为我自己也注意到了,radio在选中后,一般无法取消,查了一下google,发现还是有方法 的。因此,立马解决了:

XML/HTML代码
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>  
  2. <table class="rs" border="0" cellspacing="0" cellpadding="0">  
  3.           <tr>  
  4.             <td>HIV :阴  
  5.               <input type="radio" name="hiv[0]" value="HIV:阴" union="yin"/>  
  6.               阳  
  7.               <input type="radio" name="hiv[0]" value="HIV:阳" union="yang" /></td>  
  8.             <td>梅毒:阴  
  9.               <input type="radio" name="hiv[1]" value="梅毒:阴" union="yin" />  
  10.               阳  
  11.               <input type="radio" name="hiv[1]" value="梅毒:阳" union="yang" /></td>  
  12.             <td>疱疹:阴  
  13.               <input type="radio" name="hiv[2]" value="疱疹:阴" union="yin" />  
  14.               阳  
  15.               <input type="radio" name="hiv[2]" value="疱疹:阳" union="yang" /></td>  
  16.             <td>淋病:阴  
  17.               <input type="radio" name="hiv[3]" value="淋病:阴" union="yin" />  
  18.               阳  
  19.               <input type="radio" name="hiv[3]" value="淋病:阳" union="yang" /></td>  
  20.           </tr>  
  21.           <tr>  
  22.             <td>非淋:阴  
  23.               <input type="radio" name="hiv[4]" value="非淋:阴" union="yin" />  
  24.               阳  
  25.               <input type="radio" name="hiv[4]" value="非淋:阳" union="yang" /></td>  
  26.             <td>湿疣:阴  
  27.               <input type="radio" name="hiv[5]" value="湿疣:阴" union="yin" />  
  28.               阳  
  29.               <input type="radio" name="hiv[5]" value="湿疣:阳" union="yang" /></td>  
  30.             <td>丙肝:阴  
  31.               <input type="radio" name="hiv[6]" value="丙肝:阴" union="yin" />  
  32.               阳  
  33.               <input type="radio" name="hiv[6]" value="丙肝:阳" union="yang" /></td>  
  34.             <td><a style="cursor:pointer;" id='allyin'>全阴</a> <a style="cursor:pointer;" id='allyang'>全阳</a> <a id='allempty' style="cursor:pointer;">重填</a>   
  35. <script>  
  36. $(function(){  
  37.     $('#allyin').click(function(){  
  38.         $(':input[union="yin"]').attr('checked','checked');  
  39.     });  
  40.     $('#allyang').click(function(){  
  41.         $(':input[union=yang]').attr('checked','checked');  
  42.     });  
  43.     $('#allempty').click(function(){  
  44.         $(':input[union=yang]').each(function(){  
  45.             $(this).attr('checked','checked');  
  46.             var tmp = $(this)[0];  
  47.             tmp.checked = false;  
  48.             tmp = null;  
  49.         })  
  50.     });  
  51. });  
  52. </script></td>  
  53.           </tr>  
  54.         </table>  
因为用jquery的话,选中radion的方法很方便。所以,就尝试用这种方式解决了。。。但是用jquery无法取消checked状态,只能用原生js的方式才行(jquery是把元素都转换为对象,而不是DOM对象)

Tags: jquery, radio, checked

ipad 越狱第二步:越狱spirit

上文ipad 越狱第一步:备份数据介绍了如何备份系统。这一次介绍如何越狱。

软件spirit在上文中有下载链接:spirit.exe【由于我讲的是win下面的方法,mac下的spirit就不提供了。】

OK让我们开始吧。

将spirit.exe拷到C盘根目录下或者某个目录下(目录名有要求,1、英文;2、没有空格)

然后接上线,运行spirit.exe,机器会自动重启,这时基本上就越狱成功了,因为你重启机器后会有cydia的软件在第二屏。根据他的提示下一步下一步就OK了。

当然需要更多的配置,比如:隐藏桌面图标、文件管理等等工具,就需要使用cydia提供的软件了。这里有一篇文章,介绍了很多常用工具,可以查看一下,文中有介绍几个source源需要通过cydia程序加进去(如果你采用了91助手,就更方便了)

文章地址:http://bbs.weiphone.com/read-htm-tid-820992.html

司徒正美:自动执行函数

司徒正美,不用多介绍了吧?博客园上,JS牛人。就象他说的,取名叫ruby并不一定就是玩ruby的(额,好象没记错)

上原文吧,因为我对JS的了解还处于较初级的阶段,所以关注的就比较多了,原文来自:http://www.cnblogs.com/rubylouvre/archive/2010/02/11/1667364.html,原文有JS的执行功能,可以尝试。

请看以下两个函数:

JavaScript代码
  1. function a(){  
  2.     alert("a")  
  3. }  
  4. var b = function(){  
  5.     alert("b")  
  6. }  
它们俩有何不同呢?翻开书,作者会告诉我们,前者为函数声明,后者为函数表达式。函数声明作为一种声明,当然会在预编译阶级有所动作(声明提前),而函数 表达式则不会。另一个区别是,函数声明不能直接加一对括号让它们执行。第三个区别,表达式还可以继续细分,表达式是由常量,变量,操作符,函数等组合而 成,计算以后返回一个结果值,至少也会返回一个undefined。
JavaScript代码
  1. function a (){  
  2.   alert("a")  
  3. }();//报错  
  4. var b = function(){  
  5.   alert("b")  
  6. }();  
  7.   
  8. (function foo(){}); // 表达式:注意它被包含在分组操作符中  
  9.  var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分  
  10.  new function bar(){}; // 表达式,因为它是New表达式的一部分  

给 function 外套一对括号(分组操作符)就不报错了,括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行,再看

JavaScript代码
  1. (function  a (){  
  2.   alert("a")  
  3. })();//没有问题  

另外,我们知道,函数名的作用就是用来引用的,现在没用了,我们是不是可以把它去掉呢?

JavaScript代码
  1. (function  (){  
  2.   alert(arguments.callee)  
  3. })();//弹出自身  

知道这个,我们就可以方便地递归自身了。如弄一个深拷贝函数

JavaScript代码
  1. var deepExtend = function(destination, source) {  
  2.   for (var property in source) {  
  3.     if (source[property] && source[property].constructor &&  
  4.      source[property].constructor === Object) {  
  5.       destination[property] = destination[property] || {};  
  6.       arguments.callee(destination[property], source[property]);  
  7.     } else {  
  8.       destination[property] = source[property];  
  9.     }  
  10.   }  
  11.   return destination;  
  12. };  

另外,从另一方便也启法了我们如何【廉】价地批量生产各种各样的自动执行函数。因为把函数转换为表达式的方法并不一定要靠分组操作符,我们还可以用 void操作符,~操作符,!操作符……

JavaScript代码
  1. void function(){  
  2.   alert("司徒正美");  
  3. }()  
  4.   
  5. 0, function(){  
  6.   alert("司徒正美");  
  7. }();  
  8. -function(){  
  9.   alert("司徒正美");  
  10. }();  
  11. +function(){  
  12.   alert("司徒正美");  
  13. }();  
  14. !function(){  
  15.   alert("司徒正美");  
  16. }();  
  17. ~function(){  
  18.   alert("司徒正美");  
  19. }();  
  20. typeof function(){  
  21.   alert("司徒正美");  
  22. }();  

 

 

 

 

--EOF--

自动执行函数确实有意思。。。

Tags: 司徒正美

通过javascript的匿名函数来分析几段简单有趣的代码

从PHP5.3起,也自带了匿名函数支持,只是它的支持并没有象js这样强大,风雪之隅测试过,可以查看:深入理解PHP之匿名函数,而这篇文章对于匿名函数和new Object以及new Function()的应用,作了较为详细的介绍和测试,如果你在开发中遇到这些问题,产生疑惑了,可以借鉴一下。

今天在园子里闲逛,看到wsxjr(很邪恶地联想到“我是下贱人”,晕)写的Javascript匿名函数的一种应用:封装一文,想起自己很久以前学习javascript的经历,也曾经碰到过几个由匿名函数造成的困扰(其中一个就是由闭包引起的),下面就整理几段简单代码讨论一下,让我们大家一起进步。
1、简单形式的封装调用

JavaScript代码
  1. var userName = function() { return "jeff wong" } ();    
  2. alert(userName);    
上面的代码确实简单,我们可以逐步分解成下面的写法:
JavaScript代码
  1. var anonymousFunc = function() { return "jeff wong" }; //匿名函数    
  2. var name = anonymousFunc(); //执行该函数 返回人名    
  3. alert(name);  
2、new 一下Function的形式(大写Function)
JavaScript代码
  1. var a = new Object();  
  2. var b = new Function();  
  3. //alert(typeof (a)); //object  
  4. //alert(typeof (b)); //function  
  5. alert(a); //[object Object]  
  6. alert(b); //匿名函数  
  7. //alert(a == b); //false  
  8. //alert(a === b); //false  

正如你所看到的那样,我们new一个Object,变量a弹出的是[object Object],而new一个Function(注意,是大写Function),b在弹出的时候,生成了匿名函数。 既然b是匿名函数,函数当然可以执行,我们可以继续试试下面的代码验证自己的猜测:

JavaScript代码
  1. alert(b()); //undefined  
  2. alert(a()); //脚本错误 提示“缺少函数”  

3、new 一下function也大有乾坤(小写function)
(1)、简单的空函数

JavaScript代码
  1. var func = new function() { };  
  2. alert(typeof (func)); //object  
  3. alert(func); //[object Object]  
  4. //alert(func()); //脚本错误 func不是函数  

其实上面的代码也就等价于下面的写法:

JavaScript代码
  1. function anonymousClass() { } //匿名类  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));//object  
  4. alert(instance); //[object Object]  

(2)、函数带个返回值的,也不是很难理解

JavaScript代码
  1. var func = new function() { return "jeff wong" };  
  2. alert(typeof (func));  
  3. alert(func);  
  4. //alert(func()); //脚本错误 缺少函数  

其实上面的代码也就等价于下面的写法:

JavaScript代码
  1. function anonymousClass() { return "jeff wong"; } //匿名类  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));//object  
  4. alert(instance); //[object Object]  

(3)、还是函数带个返回值的,写法稍微有点不同

下面的代码请注意和(2)中的区分一下,因为接下来要重点讨论的就是那一点点的不同书写形式:

JavaScript代码
  1. var func = new function() { return new String("jeff wong"); };  
  2. alert(typeof (func)); //object 意料之中  
  3. alert(func); //这里?!  
  4. //alert(func()); //脚本错误 缺少函数  

上面代码的等价形式依然简单:

JavaScript代码
  1. function anonymousClass() { return new String("jeff wong"); }  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));  
  4. alert(instance);  

已经运行看到结果了吗?没错,第三种写法我们在弹出func或者instance的时候,都出人意料地得到了一段字符串"jeff wong"。细心比较(2)和(3)中的代码,除了return处的写法稍有不同之外,两处代码几乎完全一致,所以我们推断,毫无疑问,是new String的形式让我们的函数产生了意想不到的效果。 为什么会这样呢?

     原来,在javascript中,只要在new表达式之后的constructor返回(return)一个原始类型(无return时其实是return原始类型undefined,如(1)),比如第(2)种写法,那么就返回new创建的匿名对象;而如果new表达式之后的constructor返回一个引用对象,比如对象(Object),函数(function)及数组(Array)等等,那么返回的该引用对象就将覆盖new创建的匿名对象。现在再来分析(3)中的写法,由于new String会构造一个字符串引用对象,它就覆盖了new所创建的匿名对象,而new String的所指向引用值是“jeff wong”,所以弹出的必然是当前new String所分配的值。

  最后,留个思考题,大家看看下面的代码返回什么结果:

JavaScript代码
  1. var func = new function() { var str = new String("jeff wong"); return str; };//再换种写法  
  2. //alert(typeof (func)); //object 意料之中  
  3. alert(func); //猜一下这里应该是什么结果?  

原文来自于:http://www.cnblogs.com/jeffwongishandsome/archive/2010/06/27/1766207.html
作者:Jeff Wong

 

 

 

 

 

 

 

 

 

Tags: 匿名函数

jQuery的事件绑定命名空间

jQuery的bind的函数在实际应用中用的不是特别多,只是他可以绑定一个事件,但不会即时触发,也可以通过unbind来解除绑定。在没有看到这篇文章之前,我一直不知道原来bind也可以有命名空间。事实上,我看完这篇文章后,再去翻了一下手册,也才发现了一点点的注释。但手册也仅仅是一句话就带过去了。没有过多的深究,或许他认为命名空间这玩意很简单,没有必要多解释?

先看手册,由于bind方法有三个参数(type,[data],fn),所以手册上这么介绍:

XML/HTML代码
  1. .bind() 方法是用于往文档上附加行为的主要方式。所有JavaScript事件对象,比如focus, mouseover, 和 resize,都是可以作为type参数传递进来的。   
  2.   
  3. jQuery还提供了一些绑定这些标准事件类型的简单方式,比如.click()用于简化.bind('click')。一共有以下这些:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 。   
  4.   
  5. 任何作为type参数的字符串都是合法的;如果一个字符串不是原生的JavaScript事件名,那么这个事件处理函数会绑定到一个自定义事件上。这些自定义事件绝对不会由浏览器触发,但可以通过使用.trigger()或者.triggerHandler()在其他代码中手动触发。   
  6.   
  7. 如果type参数的字符串中包含一个点(.)字符,那么这个事件就看做是有命名空间的了。这个点字符就用来分隔事件和他的命名空间。举例来说,如果执行 .bind('click.name', handler) ,那么字符串中的 click 是事件类型,而字符串 name 就是命名空间。命名空间允许我们取消绑定或者触发一些特定类型的事件,而不用触发别的事件。参考unbind()来获取更多信息。   
  8.   
  9. 当一个事件传到一个元素上,所有绑定在上面的针对哪个事件的处理函数都会触发。如果注册了多个事件处理函数,总是按照绑定的顺序依次触发。当所有绑定的事件处理函数执行完毕后,事件继续沿着普通的事件冒泡途径上浮。   
Zeal这么理解,并解析了上面的一段:
http://www.zeali.net/entry/649
  1. jQuery的 bind / unbind 方法应该说使用很简单,而且大多数时候可能并不会用到,取而代之的是直接用 click / keydown 之类的事件名风格的方法来做事件绑定操作。  
  2.   
  3. 但假设如下情况:需要在运行时根据用户交互的结果进行不同click事件处理逻辑的绑定,因而理论上会无数次对某一个事件进行 bind / unbind 操作。但又希望 unbind 的时候只把自己绑上去的处理逻辑给释放掉而不是所有其他地方有可能的额外的同一事件绑定逻辑。  
  4.   
  5. 这时候如果直接用 .click() / .bind('click') 加上 .unbind('click') 来进行重复绑定的话,被 unbind 掉的将是所有绑定在元素上的 click 处理逻辑,潜在会影响到该元素其他第三方的行为。当然如果在bind的时候是显示定义了function变量的话,可以在unbind的时候提供 function作为第二个参数来指定只unbind其中一个处理逻辑,但实际应用中很可能会碰到各种进行匿名函数绑定的情况。  
  6.   
  7. 对于这种问题,jQuery的解决方案是使用事件绑定的命名空间。即在事件名称后添加 .something 来区分自己这部分行为逻辑范围。  
  8.   
  9. 比如用 .bind('click.myCustomRoutine',function(){...}); 同样是把匿名函数绑定到 click 事件(你可以用自己的命名空间多次绑定不同的行为方法上去),当unbind的时候用 .unbind('click.myCustomRoutine') 即可释放所有绑定到  .myCustomRoutine 命名空间的 click 事件,而不会解除其他通过 .bind('click') 或另外的命名空间所绑定的事件行为。  
  10.   
  11. 同时,使用命令空间还可以让你一次性 unbind 所有此命名空间下的自定义事件绑定,通过 .unbind('.myCustomRoutine') 即可。  
  12.   
  13. 要注意的是,jQuery的命名空间并不支持多级空间。因为在jQuery里面,如果用 .unbind('click.myCustomRoutine.myCustomSubone') ,解除的是命名空间分别为 myCustomRoutine 和 myCustomSubone 的两个并列命名空间下的所有 click 事件,而不是 "myCustomRoutine 下的 myCustomSubone 子空间"。  

如此看来,命名空间还是有点用的。只是不知道会有多少人用得上这个功能(不开发插件的人,估计永远用不到吧?)我也是仅作一下笔记而已

Tags: jquery, bind, 命名空间