记录IE下一个bug,label下的图片聚焦表单元素失效

应该有很多朋友已经发现过这个神奇的BUG,此BUG在IE5.5-IE8下通吃,就是当label中是图片元素的时候,无法通过点击该图片来激活绑定的表单元素,请用IE看这里>>

已有朋友提供使用添加元素+背景图+绝对定位遮盖的方法来解决这个问题,请看这里>>

这种办法在使用中可能比较麻烦,因为图片极大的可能性是不一样的,并且一般背景图和页面图片会存放在不同的文件夹甚至服务器上,加上设计者的权限等乱七八糟的问题,可能麻烦性更大。

还有一种方法就是可以使用js来实现,比较简单,虽然在无js支持的情况下会失效。我想的是:js都不支持的浏览器也不在乎多这点可访问性的牺牲。(接受异议)

基本代码:

<script type="text/javascript">
        var lb=document.getElementsByTagName('label');
        for (i=0;i<lb.length;i++) {
            lb[i].onclick=function () {
                var lbfor=this.getAttribute('for')?this.getAttribute('for'):this.getAttribute('HTMLfor')+'';
                document.getElementById(lbfor).click();
                document.getElementById(lbfor).focus();
            }            
        }
    </script>

可以通过这里查看>>

事件处理比较简单,你可以自己修改针对不同类型的表单元素使用switch来触发条件,对于checkbox框再来判断是否选正等,我省略了这些,就在js前加了IE判断。

两个小插曲:

  1. 在IE下使用getAttribute获得的值类型是Object,需要处理下,关于这点请参考rank的这篇文章
  2. 感谢屈屈提示在IE8以下版本的IE无法直接通过some.getAttribute('for')的方法获取到for的值,因为for是保留字,类似的还要class,需要使用HTMLfor。

看了腾讯的招聘网站,

下面这张图是在腾讯校园招聘的"招聘行程"页面抓下来的(使用的浏览器是Firefox3):

主要内容是图上标明(3)的地方,但是在Firefox、Chrome、Safari浏览器下,这部分等于是完全不可以见的。同时这里是通过iframe引用的另外一个页面,如果引用的是一个动态页可能还想得通,因为可能为了方便修改数据,但是引用的却是一个html静态页面,似乎就没有必要了。

"返回首页"的按钮设置在了(2)的位置而这里的"首页"又指的是哪一页呢?tencent首页,招聘首页,还是校园招聘首页?在位置(1)的地方你想或许有个回到招聘首页的连接吧?没有!那里就是一副图片。

下面这张图片依旧是Firefox用户的优待:

有趣的是,城市是你无法选择到的,如果你使用的是Firefox浏览器。

招聘虽然没必要做成淘宝/支付宝UED那么cool,或者豆瓣那么的有意思,但是至少要能使用吧?看腾讯招聘中多个职位需要”熟悉LINUX/UNIX操作和开发环境“,而真正在linux环境下的用户却无法到达腾讯,因为他们通向腾讯的大门(招聘网站)是ie only的,而他们却没有ie(如果没有双系统的话)。

今天看了twinsenliang的博客,知道腾讯缺的不是前端人员,他们有很不错的前端人才!

-12月04日

完美调用新浪新闻的简单方法

早段时间叫我同学帮忙看看南华校友网,看看大家需要些什么样的功能,有个朋友说应该加个新闻的功能。

我当时就准备做个rss聚合来获取新浪搜狐的新闻的,后面就去找新浪新闻的RSS地址,然后无意找到新浪还有这个:http://rss.sina.com.cn/my_sina_web_rss_news.html?url=news/marquee/ddt.xml 可以直接调用新浪的新闻的,所以就放弃了再去写个RSS聚合了,呵呵。

然后马上就布置到南华校友网,因为我一直都是使用的Firefox ,测试也一开始是在Firefox上测试的,一切很好。然后是opera,也很好。最后IE,啪,不行了!老是弹出一个警告框提示页面无法打开,我当时就郁闷,一时也不知道是怎么回事。

我开始以为是我的IE出现了问题(因为基本上只有测试网页兼容和上工行支付宝才会用到IE),因为太久没用它,它给我闹脾气,然后在同学的IE上打开看,也是一样的问题。

于是就打开新浪提供的js地址看,看到在182有这样一句:

document.body.insertBefore(&nbsp;js,&nbsp;null);

而这里在我的网页上,UCH页面我调用了头尾模板,所以在新浪新闻调用之后及</body>标签之前还有内容需要载入的,此时</body>也没有载入,所以上面的代码才会在IE下出现错误。一种解决方法是可以判断页面载入完成了之后在执行这个操作,也可以将上面的语句改成类似:

document.getElementById("n_news").appendChild(js);

n_news是放js调用代码的div容器的id,这样就可以使页面内部数据照代码的顺序执行。

新闻调用的演示页面:http://www.nanhuau.com/news.php

还有,大家可以在调用的时候296行的:

code>document.getElementById(rss_news_sina_div).style.height = rss_news_sina_hight;code>

注释掉,因为这样才能自适用高度,至于宽度希望大家还是指定下,至于使用原新浪的方式还是自己的CSS那就看自己的喜好了,呵呵。

如果不想实用新浪指定的那些样式,可以将SinaRSSWriteCSS这整个函数去掉就可以了

然后将这个js文件保存上传到你的空间上,引用的时候替换新浪的路径到你的路径就可以了。

付:UCHome新闻速递插件下载(随便写的,功能比较简单,除上面说的调用新浪的新闻外,另加了百度的关键词新闻),演示地址在上面写出了,有需要的朋友就下着用吧
下载地址:http://www.iveshuo.cn/d/uchome_news_plug.7z

IE8界面截图及官方下载地址

放图先:
其实IE8与IE7界面相比,没有改变多少,最大的特点就是域名高亮显示。
添加又一个“模仿IE7”的按钮

这个内存占用。。。

开发人员工具,方便查看html,css,脚本源代码并测试

因为昨天刚重装了系统,还是IE6的,本来装备装IE7的,昨天看到CB的关于IE8的新闻就先搁下了
随意截上来几张图,反正不怎么推荐大家升级吧,我一般都是用FF的,所以随便装装卸卸无所谓。
Vista 版:http://download.microsoft.com/download/1/6/6/1660dc85-4958-4b32-84ec-0c3be6b235c8/IE8-WindowsVista-x86-CHS.exeXP 版:http://download.microsoft.com/download/7/a/4/7a4b44ff-1e97-40fe-af08-33a819ccea77/IE8-WindowsXP-x86-CHS.exe
IE8欢迎页:http://www.microsoft.com/windows/ie/ie8/welcome/zh-cn/default.html

页码:

  1. 1
  2. 2