`

JS第三篇——封装一个下拉复选框

 
阅读更多

 

[我有废话要说]
     写了一天半,终于做出了一个复选下拉框的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,从此不再考虑浏览器,生活将更美好起来~~

分享到:
评论
2 楼 qiwb 2013-06-21  
运行效果图呢?
1 楼 muqingren 2012-08-24  
 

相关推荐

    有下拉菜单的复选框的js代码

    在网页开发中,有下拉菜单的复选框是一种常见的交互元素,它允许用户在一组选项中进行多项选择,同时这些选项又能隐藏在一个下拉菜单内以节省空间。本示例涉及的技术点主要包括HTML基础、CSS样式以及JavaScript编程...

    复选框封装类

    在这个“复选框封装类”资源中,开发者提供了一个自绘的复选框类,以增强其视觉效果和定制性。下面将详细介绍这个封装类以及相关的编程知识。 1. **自绘控件**:在Windows API或MFC(Microsoft Foundation Classes...

    tree 树形结构带复选框

    在HTML中,`&lt;input type="checkbox"&gt;` 用于创建一个复选框,用户可以勾选或取消勾选。复选框通常与`&lt;label&gt;`标签一起使用,提供更好的用户体验,使用户可以通过点击标签文本来改变复选框的状态。 要将树形结构与复...

    QTableView添加复选框,下拉框控件

    对于复选框,我们可以继承QStyledItemDelegate,并重写`paint()`方法,以便在绘制项时添加一个复选框。同时,我们也需要覆盖`editorEvent()`方法,以响应用户的点击事件并更新模型的数据。为了确保复选框的状态与...

    复选框的左右移动

    每个容器内部包含若干个复选框,每个复选框对应一个权限项。 2. **事件绑定**:使用jQuery的`click`事件,我们可以监听用户的点击行为。当用户点击复选框时,触发相应的移动操作。例如,可以为每个复选框添加一个...

    jquery实现的下拉复选框信息

    本主题将深入探讨如何使用jQuery来实现一个功能丰富的下拉复选框,这种组件常用于网页表单,允许用户多选选项。 首先,下拉复选框是一种增强传统HTML下拉列表用户体验的组件。传统的HTML `&lt;select&gt;` 元素只允许用户...

    带复选框且支持搜索功能的下拉列表1(1--14)

    标题中的“带复选框且支持搜索功能的下拉列表1(1--14)”指的是一个特定的UI组件,这个组件结合了下拉列表、复选框和搜索功能,适用于用户在多个选项中进行选择,并能通过搜索快速定位所需项。这种设计提高了交互性和...

    下拉复选控件,下拉复选控件

    下拉复选控件,通常被称为`CheckComboBox`,是一种结合了传统下拉列表与复选框功能的自定义控件。在Windows编程中,它主要用于用户界面,提供了一种让用户能够多选列表项的方式。在标准的Windows API中并没有直接...

    解决Extjs当中复选框全选后,取消选中某一项,全选框仍是选中状态的问题

    在EXTJS这个强大的JavaScript框架中,用户界面的交互设计是其一大亮点,其中包括各种各样的控件,如复选框(checkboxes)和全选功能。然而,在实际应用中,我们可能会遇到一个问题:当实现全选功能后,如果尝试取消...

    安卓Android源码——封装的一个tabhost框架.zip

    这个资源"安卓Android源码——封装的一个tabhost框架.zip"显然是一个包含源代码的示例,它展示了如何将TabHost进行封装,以便更方便、高效地在应用中使用。下面,我们将深入探讨TabHost及其封装的原理和实践方法。 ...

    QT treeview ,可以由复选框勾选

    1. **独立模式**:每个复选框独立,互不影响。勾选父节点不会自动改变子节点的状态,反之亦然。 2. **半关联模式**:勾选父节点会自动勾选所有子节点,但子节点的改变不会影响父节点。这种模式在处理部分选择时很...

    树形复选框(Checkbox)

    本项目通过结合JavaScript和CSS技术,实现了一个具有展缩功能和选中数显示的树形复选框组件。下面我们将深入探讨这个组件的核心知识点。 首先,`Checkbox`在HTML中是`&lt;input type="checkbox"&gt;`标签,用于创建一个...

    MFC 树形控件 复选框

    本篇文章将详细探讨如何在MFC中实现树形控件与复选框功能,使得父节点的选择能够影响其所有子节点的选中状态。 首先,我们需要了解MFC的树形控件(CTreeCtrl)基本用法。CTreeCtrl是MFC封装的Windows控件,用于显示...

    4.4ListBox控件(打造带有复选框的ListBox)

    首先,我们要知道,标准的ListBox控件并不直接支持复选框,因此我们需要使用一个特殊的控件——CCheckListBox类。这个类是MFC对Windows API中的CheckListBox控件的封装,它允许我们在列表项前添加复选框。 创建...

    多选复选框

    在这个例子中,我们创建了三个复选框,每个都有一个唯一的id(option1、option2和option3),并且它们都属于同一个命名组"options"。这样,当用户在提交表单时,服务器就能获取到被选中的选项。 在实际应用中,多选...

    带复选框的多选树控件(支持XML加载)

    本文将深入探讨一个特定的UI组件——“带复选框的多选树控件”,该控件支持XML作为数据源,这使得数据管理和呈现更加灵活。 首先,让我们了解“带复选框的树控件”是什么。在Windows应用程序中,树控件是一种常见的...

    一个基于jQuery 实现的的全选、反选复选框插件源码例子

    这个“基于jQuery实现的全选、反选复选框插件源码例子”是一个很好的学习资源,可以帮助开发者理解如何利用jQuery来操控DOM(Document Object Model)中的复选框,并实现全选与反选的功能。 首先,我们要了解jQuery...

    彩色图形复选框

    标题中的“彩色图形复选框”指的是在VB(Visual Basic)环境中使用的一种特殊类型的复选框控件,它能够展示彩色的图形效果,而非传统的黑白或单色样式。这种控件通常用于提升用户界面的视觉吸引力,使得软件更加美观...

    封装QTableView,支持冻结列,绘制表头,按钮,复选框,支持字体指定颜色设置等操作

    综上所述,这个资源提供了一个功能丰富的QTableView封装,不仅具备基本的表格展示和编辑功能,还增加了如冻结列、自定义表头和按钮、复选框以及字体颜色设定等高级特性,以满足更复杂的用户界面需求和交互设计。

Global site tag (gtag.js) - Google Analytics