[我有废话要说]
写了一天半,终于做出了一个复选下拉框的JS控件~
昨天晚上装软件装到11点,接着写JS写到1点,样式始终不对,早上到公司用默认的FF一开就正确了……又是浏览器问题,定位了就好搞了,今早又花了1个多小时,终于圆满了。
[正文——封装一个复选输入框的JS文件]
需求:
1提供公用的js文件,传入input表单元素和下拉复选框中的key-value对,将该input表单实现下拉复选框。
/**//**
* Creat date 2011-11-10
* Creat by zhuoyueping
*支持input表单的下拉复选框。
*使用方法:
* (1)调用js函数:setSelectBox(textItem, myArray);
* 参数说明:
* textItem:input表单元素
* myArray:二维数组,存放下拉框中的key-value对。
* (2)使用实例:
<html>
<head>
<title>my test</title>
<script type="text/javascript" src="comboSelectBox.js"></script>
<script type="text/javascript">
function testSelectBox(textItem) {
var myArray = new Array();
myArray['one'] = 1;
myArray['two'] = 2;
myArray['three'] = 3;
myArray['4'] = 4;
myArray['5'] = 5;
myArray['6'] = 6;
myArray['7'] = 7;
myArray['8'] = 8;
setSelectBox(textItem, myArray);
}
</script>
</head>
<body>
<form id="mainForm">
实例
<br>在此控件下方显示下拉复选框
<input id="input" onclick="testSelectBox(this);" style="height: 20px; width: 100px;" />
<input type="button" id="Text1" style="height: 20px; width: 100px;" />
</form>
</body>
</html>
*/
//创建用于显示隐藏的tableDiv
var div;
function showDiv() {
div.style.display = "block";
}
function hideDiv() {
div.style.display = "none";
}
/*
*根据复选框中的数值,更新input表单的显示。
*当下拉框中每个checkbox被点击后,触发刚方法。
*/
function updateValue() {
var value = "";
var array = new Array();
var form = document.getElementById("mainForm");
var len = form.c.length;
for (var i = 0; i < len; i++) {
if (form.c[i].checked) {
var v = form.c[i].value;
array.push(v);
value = value + v + ";";
}
}
form.input.value = value;
}
function setSelectBox(textItem, myArray) {
//复选下拉框首次创建,并显示
if (div == undefined) {
var itemTop = textItem.offsetTop; //控件的定位点top
var itemHeight = textItem.clientHeight; //控件本身的height
var itemLeft = textItem.offsetLeft; //控件的定位点left
var top = itemTop + itemHeight + 5;
div = document.createElement("div");
div.onmouseover = showDiv;
div.onmouseout = hideDiv;
//下拉层的位置、下拉滚动等样式
var trs = '<div id="tableDiv" style="position:absolute;text-align: center;OVERFLOW: auto; SCROLLBAR-BASE-COLOR: #cccccc; HEIGHT: 80px;SCROLLBAR-FACE-COLOR: #ffffff;top:' + top + '; left:' + itemLeft + ';WIDTH:100px;Z-INDEX: 1;SCROLLBAR-SHADOW-COLOR:#cccccc;SCROLLBAR-ARROW-COLOR: #cccccc;SCROLLBAR-3DLIGHT-COLOR: #cccccc; background-color: #ffffff; border: 1px solid black"><table>';
trs += '<table>';
//初始化下拉的选项
for (var key in myArray) {
trs += '<tr><td nowrap height="28"><input type="checkbox" name="c" value="' + key + '" onchange="updateValue()">' + myArray[key] + '</td></tr>';
}
trs += '</table></div>';
div.innerHTML = trs;
var beforeNode = textItem.nextSibling;
// textItem.parentNode.insertBefore(div, beforeNode); 使用该方法,会使input后面的控件位置联动。
textItem.parentNode.appendChild(div);
}
else {
//该复选下拉的层已经创建了,那么再次点击input表单的时候,显示
showDiv();
}
}
妖孽问题总结:
1.myArray是个二位数组,key是one,value是1,可以通过上面代码的遍历取出。
var myArray = new Array();
myArray['one'] = 1;
2.先不是用得appendChild的方法,是想用document.write方法,这个方法在input的onclick方法后被调用,却把界面的其他内容都清掉了,只有我自己write里面的html还在。。
3.div中的绝对的位置,需要和top、left这些一起用。
position:absolute
4.最妖孽的问题就是jar包得版本,还有浏览器的支持。
IE不支持div.setAttribute、table.innerHTML方法。。于是我只有在div层上再加一个div层,用innerHTML来写内部div的样式和table。
下一节,用jquery来优化该JS,从此不再考虑浏览器,生活将更美好起来~~
分享到:
相关推荐
改造了一个asp.net web版的 带复选框的下拉列表,封装于用户控件内,方便其它应用页面的调用,效果非常不错,附件中有源代码调用实例。
安卓Android源码——封装的一个tabhost框架.rar
安卓Andriod源码——封装的一个tabhost框架.zip
安卓Android源码——封装的一个tabhost框架.zip
本资源内含自绘的复选框封装类和测试程序!
针对QTableWidget实现复选框、编辑功能的demo,在原生可编辑功能上进行了自定义功能的封装,参考此案例可进行自行扩展更多自定义需求开发,针对有自定义功能需求的开发者有一定启发作用,其中包含完整案例,本项目...
c#面向对象——封装
但是最近公司需要做一个带复选框的树形结构,并且最关键的是要嵌入到JSP页面中,传递的数据不是用JSON传递的,是直接通过后端跳JSP页面的方式来的,所以就没有用网上的插件,就自己写了一下简单的实现。
socket类——封装,没含多线程,socket类——封装,没含多线程,
socket编程——c语言封装——c++封装(一对一对话).zip
带复选框的树控件,外加一个MSXML的封装类,可用XML作为数据源,挺实用挺方便,复选框可以有三种状态,选中,不选中,和部分选中,默认情况下所有的节点都带复选框,也能配置不带复选框的项。
10.第十章——封装——面向对象三大核心之一.pdf
《Android 设计模式:(一)观察者模式 —— 封装行为的大局观》示例代码
vue3.0实现复选框组件的封装 本文实例为大家分享了vue3.0实现复选框组件封装的具体代码,供大家参考,具体内容如下 大致步骤: 实现组件本身的选中与不选中效果 实现组件的v-model指令 改造成 @vueuse/core ...
复归于道——封装改道芯片业.pdf
Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装
用JS实现的时间空间——已经封装好了,可直接使用
通过jquery技术来操作表格是件简单的事,通过jquery的语法,可以很轻松的完成表格的隔行换色,悬浮高亮,在实际的应用中可能会出现表格中带复选框的,删除时,将复选框所在的行的记录删除。在这的地方,可以加个特效...
react-native-checkbox-form是一个简单的复选框组件,它可以在Android和iOS上运行,在checkbox-form中使用Icon取决于 , 演示效果 安装 npm install react-native-checkbox-form --save 复选框形式的部分取决于 ,...