当前标签: ie

JS对IE下表单元素name和id不同步的取值异常BUG03/08/2009

随着小生与IE的交往越来越深入,这个并不陌生的老朋友的坏脾气也一天一天的被挖掘出来,尽管她试图遮遮掩掩,蒙混过关……
这次的bug出在一个表单验证上,我用javascript对用户的输入进行客户端验证,由于需要在之前已经完工的表单上加入一个新的元素来显示一些额外信息,意外的,我将这个元素的id取了一个和之前已经存在的表单元素的name相同的名字,我的表单验证使用document.forms['form_name'].elements['element_name']来定位元素,因此未给之前的任何元素id属性。呼呼!bug就这样出现了,当我们验证之前元素的checkd属性时,总是返回undefined,这实在太奇怪了!我们将其与SVN中的上个版本比较,发现只是增加了一个元素,回溯到上个版本,一切正常,问题就在这个元素上了,我们去除了这个新增元素的id属性,表单验证的js代码又能工作了。
     今天,我仔细研究了一下这个问题,发现:只要表单元素的id和name值不同,即会引发javascript取元素不准确的bug,最后我还发现form.elements['element_name']取表单元素如果id和name相同的值却指向不同的元素,该方法居然只能返回undefined,不管在ie还是firefox、opera下。
     看我做的一个示例来重现这个bug吧,我故意将第一个元素的id和第二个元素的name值设为相同,第二个元素的name等于第一个元素的id,而第三、四两个元素的设置是正常的,接着使用了三种方法:getElementById、getElementsByName、elements来获得value,结果在ie6、ie7下,无论是使用getElementById还是getElementsByName都不能取到第二个元素(文本框)的value,在ff、opera下却都能正常工作。

点击查看ie下name和id不同步导致的js取值异常的demo

| 2条评论分类: web前端编程 标签:  

用JS onpaste事件禁止向控件粘贴内容10/21/2008

应该是快钱看到的实现,叫我确认手机号码,我就想偷懒,把上面填了一遍的复制下来,结果不让!

气的我不得不看一下代码(自动接触PHP后落下的这职业病,现在怕是要陪伴我一生了)
[codes=html]
<input name="mobileNo1" class="width150px" tabindex="2" type="text" maxlength="11" value="" onpaste="return false;"/>
[/codes]

额,原来是这么个新鲜事件onpaste,从字面上理解是“粘贴事件”,看了相关资料

onpaste Event

Fires on the target object when the user pastes data, transferring the data from the system clipboard to the document.

Platform Support
IE  Netscape  Mozilla      Opera  Safari
4.0+  no            no    no            1.0+

当用户从系统剪贴板粘贴数据、传输数据时,激活此事件。只有IE和Safari是支持该事件的,难怪我都不曾见过(借口!!)

不过,我发现,用Ctrl+拖动,还是可以将内容复制过来滴。。。。

| 发表评论分类: web前端编程 标签:  

IE的绝对定位缺陷及修复方案03/03/2008

这个问题出现在一个网站页面的布局上,因为左侧的背景阴影与其顶部的flash对接时,使用传统的float总是无法完美实现,要么歪了一点,要么出现一条缝隙,于是我决定用绝对定位(position:absolute)来解决它,问题就出现了:当我将左侧边栏绝对定位,理论上应该是位于父容器的左侧,可是在IE下预览的时候,它似乎跑到了中间,以下是重现问题的代码: 竟有如此美文,尽阅之 »

| 2条评论分类: web前端编程 标签:  

PHP界大牛们
反人类不分昼夜
牛掰级朋友圈子