谈点关于checkbox的事情
发布时间:2010-09-28 14:49:00
今天在开发一个手机短信通讯录的前端界面时,界面中使用了checkbox,来做为各项的选择控件,但是操作时,除了点差子。由于逻辑需要,需要预先选中用户上次选中的那些项目。但是当我使用javascript dom编程时,在IE系列浏览器中,直接在创建checkbox控件的时候无法让他默认选中。
情况是这样的,出于性能的考虑,我开始的做法是先创建一个文档碎片,然后讲所有的选择项循环加载到这个文档碎片中,当然这个时候我就设置了:
checkbox.checked = ture
然后再一次讲这包含大量选项的文档碎片加载到选项列表容器中,代码类似这样:
var optsList = document.getElementById('optsList');var optsDF = document.createDocumentFragment();var chkBox = [];for(var i =0; i < length; ++i){ chkBox[i] = Builder.Node('input',{ id: 'chkBox'+i, value: i, checked : (bChked) ? ture : false }); optsDF.appendChild(chkBox[i]); }optsList.appendChild(optDF);
让我简单的说明下,为什么我要先创建文档碎片,先把列表项添加到文本碎片中,然后一次加到类表项容器中,而不直接把列表加载到类表项容器中。这个是由于如果直接这么做,浏览器就给在你每次添加列表项是,重绘页面(当你使用FIREBUG调试时,这个过程被放大,页面会闪烁一次)。这么做效率比较低,也占资源。所以我采用先将全部要的列表添加到文档碎片中,然后再添加到目标的列表框容器中,虽然这么做还多添加了一次,但是由于往文档碎片添加节点,页面是不会重绘的,所以反而会比较块,效率更高。
唉,可不幸的是,IE系列浏览器(IE6~8),它的逻辑是,如果你不把checkbox添加到页面文档中,你是不能设置它是否被选中的(虽然这逻辑似乎有点合理)。但这个不是我想要的结果,大家可以尝试下这两段代码:
代码一:var option = document.createElement('input'); option.value = '1'; option.checked = true; option.type = 'checkbox'; document.body.appendChild(option);
代码二 var option = document.createElement('input'); option.type = 'checkbox'; option.value = '1';option.checked = true; document.body.appendChild(option);
唯一的区别是,在代码二中我是在将checkbox添加到文档以后,再设置的checked = ture,而这么做,在IE和其他浏览器总都得到了选项被选中的状态。
唉,没有办法,为了兼容性,我只有采取我开始不愿采取的做法,直接讲选择项添加到列表框容器中。顺便说一句,除了Javascript中表示"非"的值false,‘’,null,0,NaN,undefined,checked设置其余任何值,都标识选中,比如:option.checked = 'false'。
所以,如果你的开发中也要使用DOM编程来实现加载时选中checkbox,要兼容的话,也只能采取我这种方法,先加载控件,然后再设置选中状态。


猜你喜欢
- 一、概念1. Pinia => PiniaPinia(发音为/pi?nj?/,如英语中的“pe
- 有时候我们在设计表单的时候不希望用户输入其它字符,只想他在input中输入数字,那么我们就可以使用下面的代码,当然这个比较是客户
- 【1】MySQL中的日期时间类型MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp数据类型
- 目前任务需要做一个界面程序,PyQt是非常方便的选择,QT丰富的控件以及python方便的编程。近期遇到界面中执行一些后台任务时界面卡死的情
- 1.游标方式 代码如下:DECLARE @Data NVARCHAR(max) SET @Data='1,tanw,2,
- 一、总结(点击显示或隐藏总结内容)一句话总结:xlwings 是 Python 中操作Excel的一个第三方库,支持.xls读写,.xlsx
- python2.7yum install -y zlib zlib-devel openssl openssl-devel mysql-de
- 导入pandas模块:import pandas as pd使用import读入pandas模块,并且为了方便使用其缩写pd指代。读入待处理
- Linux RedHat下安装Python2.7、pip、ipython环境、eclipse和PyDev环境准备工作,源Python2.6备
- 每一个变量都有数据类型,Go中的数据类型有:简单数据类型:int、float、complex、bool和string数据结构或组合(comp
- 简介pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和
- 发送电子邮件在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号
- 使用云服务器时,我们有时会连接数据库,但在使用Navicat Premium15来连接时,总会遇到报错。常规连接方式,以腾讯云服务器中的My
- 本文介绍了vue下history模式刷新后404错误解决方法,分享给大家,具体如下:官方说明文档:https://router.vuejs.
- 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。在空域运
- 在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B
- python中的列表是可以直接进行逆序排列的,但是在 python中,逆序排列也是有一定规则的,一般是按升序排序,也就是从左到右。比如 li
- Part.I 预备知识Chap.I 几个概念的区分Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了
- 通过XSL转换XML文件 最近,我喜欢上了XML编程,但又苦于它的美观程度又不够,找了许多书才搞定。用XML好是蛮好,但它还是不太适合做显示
- 一、新建一个用户老板:给我新建一个用户joytom,密码设置为123321,并任意远程主机都能访问,五分钟完成,实现不了就给我提桶走人!小王