在IE下,当eval遇上function,IE下会出现怪异情况,我们用例子一步步说明:

情况1:eval里没有function,直接执行:

eval("alert('ss');");//所有浏览器正确均输出

情况2:eval里有function,function立即执行:

eval("(function(){alert('ss');})();");//所有浏览器正确输出

情况3:eval里有function,使用变量保存function引用并调用该function:

var f=eval("(function(){alert('ss');})");
f();
//IE下报错:缺少对象 其他浏览器正常

当在eval定义一个function并返回给变量时,IE报错:缺少对象。可见IE下eval里定义的function并不能成功返回到eval外部。

解决方法:使function对象作为一个执行结果返回:

方法1:

var f=eval("(function(){ return function(){alert('ss');}})()");
f();
//所有浏览器正确输出

eval里调用一个立即执行的函数,该函数执行之后返回一个function对象,此时该function对象的引用成功返回到外部变量。

方法2:

var f=eval("(false||function(){alert('ss');})");
f();
//所有浏览器成功输出

该方法也是jquery里使用的方法,function作为或表达式的执行结果返回,同样能成功解决问题。当然,表达式并不局限于上面的false||function(){},各种表达式只要能成功返回function,均可解决问题:

/* 与表达式:*/
var f=eval("(true&&function(){alert('ss');})");
f();
//所有浏览器正常输出

/* 三元表达式:*/
var f=eval("(true?function(){alert('ss');}:'');");
f();
//所有浏览器正常输出

the end..

JavaScript eval() 函数

定义和用法
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法
eval(string)
参数     描述
string     必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值
通过计算 string 得到的值(如果有的话)。
说明
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
抛出
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
提示和注释
提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。

 function showsubmenu(sid) {
            whichEl 
= eval("submenu" + sid);
            
if (whichEl.style.display == "none") {
                eval(
"submenu" + sid + ".style.display=\"\";");
            }
            
else {
                eval(
"submenu" + sid + ".style.display=\"none\";");
            }
        }

 

 

posted @ 2011-08-08 10:16 海皮球 阅读(23) 评论(0) 编辑
<script type="text/javascript">
        
//把int转换成string的最高效的方法
        var selector = 234
        
if (typeof selector == 'number') {
            alert(
typeof selector);
            selector 
+= '';
            alert(
typeof selector);
            alert(selector);
        }
</script>
posted @ 2011-08-01 12:06 海皮球 阅读(212) 评论(0) 编辑

开源中最好的Web开发资源汇总

1.qTip

是一个实现圆角对话气泡框样式的Tooltip jQuery插件。支持多种浏览器,可定制,功能强大。

主页:http://craigsworks.com/projects/qtip/

下载:http://craigsworks.com/projects/qtip/download

示例:http://craigsworks.com/projects/qtip/

2.Waypoints

是一个轻量级jQuery插件,可用于当鼠标滚动到一个元素时触发执行一个函数。利用这个插件就能够实现当鼠标向下滚动时,固定在页面顶部显示一个浮动的表头或当鼠标向下滚动到一定位置时自动显示“回到顶部”的按纽。
Waypoints.jpg
 

 

3.AutoSuggest jQuery Plugin

是一个轻量级jQuery插件,可用于自动搜索,并使搜索的字母加粗.如下图.

 

 

posted @ 2011-06-08 15:39 海皮球 阅读(53) 评论(0) 编辑

先来两张预览图,测试浏览器为搜狗浏览器。

使用方法:

1、右键点击我,把我添加早收藏夹

2、在任意页面点击刚才添加的收藏,然后等一会,就会在页面右下角看到一个firebug的小按钮,然后点击它即可。

附:

如果你想让页面默认就有一个firebug的小按钮进行调试,那直接加一句:

1 <head>
2 ...
3 <script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
4 ...
5 </head>

虽然现在能在IE是使用fb了,但是IE上的fb缺陷还是有的,比如html代码不会实时更新,尤其是在测试jquery插件的时候就无奈了。

不过总的来说,firebug for ie还是解决了我们在IE上检查样式及代码提供了一个很好的工具。

posted @ 2011-04-21 12:53 海皮球 阅读(44) 评论(0) 编辑

有些sql server 2005在安装过程中,可能将SQL server 服务的端口配置成了动态端口,没有使用默认的1433端口,从而导致了sql server 2005 的服务启动了,但是却没有开启1433端口。解决办法就是取消动态端口,并将端口改成1433。

方法如下:

首先,打开Sql Server Configuration Manager -> SQL Server 2005网络配置 -> MSSQLSERVER地协议

看看TCP/IP协议是否启动,然后右键点击属性,在分页菜单中选"IP地址",将把"IP1"、"IP2"和"IPALL"中"TCP端口"为1433,"已启用"改为"是","TCP动态端口"改为空,如下图:



其次,同理修改SQL Native Client配置 -> 客户端协议 -> TCP/IP,右键属性,将"默认端口"改为1433,"已启用"改为是。

最后,重启SQL server服务,1433端口就开放了。

posted @ 2010-11-24 09:32 海皮球 阅读(542) 评论(0) 编辑
摘要: 网址:http://zion.earan.net/ 用户名:demo\test1到demo50 密码:aaaaaa阅读全文
posted @ 2010-05-10 13:13 海皮球 阅读(69) 评论(0) 编辑
摘要: BACKUP DATABASE [XSL] TO DISK = N'D:\Web\xsl\xslbak.rar' WITH INIT , NOUNLOAD , NAME = N'XSL 备份', NOSKIP , STATS = 10, NOFORMAT阅读全文
posted @ 2010-03-31 10:39 海皮球 阅读(20) 评论(0) 编辑
摘要: 1.在IE中获得Cookie中的值 在地此栏中输入:javascript:alert(document.cookie) 这个在FireFox中同样适用.不过FireFox中有WebDeveloper2.iframe和跨站点cookie被阻止IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认...阅读全文
posted @ 2009-12-29 09:28 海皮球 阅读(35) 评论(0) 编辑
摘要: 开发类: VS2008/2005:.net的开发环境; VS 6.0:主要是C++的开发环境; Microsoft SQL Server 2000/2005:MSSQL数据库管理工具; SQL Prompt:MSSQL数据库管理工具 SQL脚本智能提示; MySql:MySql数据库驱动程序; MySql Front:MySql数据库可视化管理工具; Microsoft Silverlight 2...阅读全文
posted @ 2009-08-18 11:11 海皮球 阅读(73) 评论(0) 编辑
摘要: [代码]阅读全文
posted @ 2009-08-17 16:10 海皮球 阅读(50) 评论(0) 编辑