javascript 的 “!function” 是什么意思?
叹号后面跟函数!function
和加号后面跟函数+function
都是跟(function(){})();这个函数是一个意思,都是告诉浏览器自动运行这个匿名函数的,因为!+()这些符号的运算符是最高的,所以会先运行它们后面的函数
;!function(window, undefined){ //code... }(window); (function(){ //code... })(); (function (window, undefined){})(window);
这是javascript的匿名函数,其实就是定义了一个匿名方法,然后再调用它。
什么时候可以用这种方式呢?就是当方法须被调用且只会被调用一次的时候。
闭包的好处之一:对js进行压缩的时候,
(function(window, undefined))里的window和undefined
均可以替换成其他简写字符,从而减少文件大小,因为他们被视为局部变量使用。
window: 表示 BOM 浏览器对象模型中的 window 对象,
对于undefined,因为他不是javascript关键字。
如果jQuery的写法是这样的
(function( window ) { ... // code goes here })(window);
必然造成中间代码里的 undefined 遭到污染。
因为在默认情况下,对于一个未定义的变量,它的值应该是 undefined,
假如用户使用
var undefined = ‘myValue’;
// 或者
window.undefined = ‘myValue’;
进行赋值,那么,jQuery 中的 undefined 的值就变成了用户指定的值(这里是字符串 ‘myValue’)。这样会造成 jQuery 内部异常。
而 jQuery 采用的这种写法,就很好的避免了这个问题。
最后那个(window),表示调用此函数时候只传入的window对象。
jQuery在执行匿名函数的时候,只传递一个参数 window,而不传递 undefined,
那么函数体中的 undefined 局部变量的值,刚好就是 undefined,此举甚为巧妙!
举个例子,如下:
(function( a, b) { if(b) alert(a + b); else alert(a); })(1);
结果是:1
jquery $.ajax各个事件执行顺序
jquery中各个事件执行顺序如下:
1.ajaxStart(全局事件)
2.beforeSend
3.ajaxSend(全局事件)
4.success
5.ajaxSuccess(全局事件)
6.error
7.ajaxError (全局事件)
8.complete
9.ajaxComplete(全局事件)
10.ajaxStop(全局事件)
PHP5.3+针对短标签支持配置
第一种方法:替换程序里的内容,以后就省心了。
针对所有的php脚本 在DW里面运行查找替换l 主要做替换操作 当然是短标签替换为整标签 注意顺序别弄乱了
1,所有的’<?=’ 替换为 ‘<?php echo ‘; —注意空格
2,所有的’<?’替换为’<?php ‘ —注意空格
3,所有的’<?php php’ 替换为’<?php ‘ —注意空格
4,所有的’<?php xml’ 替换为’<?xml’ —注意空格(程序中如果有xml的话)
第二种方法:打开php.ini,找到“short_open_tag = Off”,将其修改为“short_open_tag = On”,然后重启IIS或Apache即可。
js暂停几秒钟再执行的函数怎么写
//使用 setTimeout 时需注意,当该代码执行时,JS 会立即编译函数第一个参数“code” //所以该函数的第一个参数应该为:需要编译的代码、或者一个函数 //例1:setTimeout("alert('x')", 2000); //例2:setTimeout(function () { alert('x'); }, 2000); //错误示例:setTimeout(alert('x'), 2000); "x" 会立马跳出来,延时没有效果 //所以你的代码应该是: $.get("bad_step.php?step="+$(this).val(),function(data,status){ setTimeout(function () { $('#step').html(data); }, 8000); });
关于jquery $.each 跳出循环问题
关于jquery $.each 跳出循环问题
在写 jquery 使用 $.each 函数循环的时候,有的时候需要跳出循环。
首先考虑到的方法是break,当使用break的时候,发现程序报错。Illegal break statement——不合法的break声明。
原来虽同为循环,each函数还是不同于原生态的for循环,不能够直接使用break或者continue 。
在$.each 中想要终止循环,可以使用 return
return false 跳出循环
return true 进入下一个循环
$.each( Array , function(i,e){ console.log( e ); return true ;//相当于continue 跳出本次循环,继续下次循环 return false ;//相当于continue 跳出循环,不在执行后面的循环 });
jQuery 的 live() 方法对 hover 事件的处理
要求 jQuery 1.4.3+
因为hover不是标准的事件,因此无法直接使用live进行处理,故使用以下方法代替,效果一样。
mouseenter:当鼠标指针进入(穿过)元素时
mouseleave:当鼠标指针离开元素时
$("table tr").live({ mouseenter: function() { //todo }, mouseleave: function() { //todo } });
解决input file 的onchange事件只生效一次的问题
解决input file 的onchange事件只生效一次的问题
文件选择框的onchange事件只在第一次改变时生效,以后再选择文件不会触发onchange事件。
解决方法1:用jQuery的live代替直接使用change。
错误代码:
$("#fileToUpload").change(function(){ //do someing })
正确代码:
$("#fileToUpload").live('change', function(){ //do someing })
解决方法2:onchange后,生成一个新input type file代替旧的。
$('#inputFileID').replaceWith('<input name="fileToUpload" type="file" id="inputFileID" />');