时慧 2010年01月22日 星期五 23:47 | 1709次浏览 | 0条评论
开发Web
我们平时开发软件,一般都只要对应Windows,特殊情况下,还要对应Linux或者Unix,但是比较罕见。但是Web开发,就必须支持多浏览器了。玩过Web开发的人都知道,所谓多浏览器开发,就跟多操作系统开发是一样的。我用Qt开发过跨平台的软件,遇到过一个什么bug,在Windows下一切正常,但是到了Linux或者Solaris下,就不对了,后来仔细研究了一把,原来是Qt3.1的时候,在不同的平台下,对正则表达式的解释是不一样的。当然,主要原因是因为在Unix-Like的平台下,有自带的regex.c可以使用,Windows下当时Qt就是自己实现的,结果表现惊人有细微差别,不过后来的Qt里,好像修正了这个Bug,当时也整得很惨啊。
谁知,到了Web开发,这个简直就是家常便饭了,记得一个IT笑话说,Web Standard is just a joke, there is no standard at all in web world。果然就是这样啊!
当然,其中有一个装B犯——IE,它完全无视W3C的标准,什么都玩自己的一套——对HTML有自己的解释,DOM模型也有自己的一套,事件处理也是自己一套,JavaScript也有自己一套,CSS也有自己一套,甚至还曾强推VBScript,还好没有得逞,现在只有一些政府网站,还能看到有VBS的影子。
这样也就算了,最神奇的是,即使是IE自己,IE6,IE7和IE8,表现都有很大不同,简直令人发指!
不过,这些我们都熬过去了,今天遇到一个问题,那真叫一个玄妙啊!
搞了一个表单,有两个Field,放在对话框里,对话框因为已经有Button了,所以就不想再加一个Submit按钮了,直接按那个OK按钮的时候提交就可以了。但是呢,顾客又要求按回车时,触发这个Submit事件。我研究了一下,在form里,即使不加Submit按钮,只要焦点是在Field上,按回车也是会产生onSubmit事件的于是想不加Submit按钮,直接绑定事件了。于是写了一个小demo试了一下,果然在IE,Firefox和Chrome里都正常执行了。
但是谁知,妖怪的事情出现了。在实际的工程里,竟然最后只有Chrome响应了,其他两个统统无视,这是怎么回事?好在Firefox也有同样的问题,这就好办了,于是用Firebug捕捉了一下事件,发现竟然连onSubmit事件都没有产生?为什么我的demo产生了这个事件,但是到了项目里就没有了呢?
首先,当然想到是不是被屏蔽了,比如那里执行了event.stop这类的操作了?或者是cancelBubble了?找了大半天,没有啊?再说如果真的有这样的语句,那Chrome岂不是错的离谱了?
不知道怎么查来查去的,最后竟然被我查到了一个网页,那个人说他遇到一个怪事,当Form里只有一个Field的时候,按回车,Submit事件是会触发的,但是如果有两个或者以上的Field时,如果没有Submit按钮,那这个事件就不会触发!
我试了一下,果然IE和Firefox还有Opera都是这个鸟样,奇怪啊奇怪,竟然只有Chrome和Safari是会触发的。解决的办法有一个,那就是加Submit按钮,然后把它隐藏掉。但是呢,隐藏也不能单纯的设置visibility:hidden或者display:none,这两个都会造成不响应click事件,道理也很简单,如果没有显示,那为什么要响应呢?
所以,就要用下面的方法了——"width:0px;height:0px;border-width:0px;position:absolute;left:-500px;top:-500px;"
这简直就是欺骗浏览器的感情啊!!!
Zeuux © 2024
京ICP备05028076号
暂时没有评论