月份: 2014-07

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"  />');