`

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;`标签一起使用,提供更好的用户体验,使用户可以通过点击标签文本来改变复选框的状态。 要将树形结构与复...

    jquery实现的下拉复选框信息

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

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

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

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

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

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

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

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

    【标题】"安卓Android源码——封装的一个tabhost框架"主要涵盖了Android开发中关于TabHost组件的使用和封装技巧。TabHost是Android SDK提供的一种用于创建多标签界面的组件,常用于实现应用内的导航功能。在传统的...

    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"。这样,当用户在提交表单时,服务器就能获取到被选中的选项。 在实际应用中,多选...

    java下拉菜单复选框

    这个功能使得用户能够在文本框中通过点击触发一个下拉菜单,然后在菜单中选择多个复选框选项,这些选项会自动显示在文本框内,并且可以选择不同的分隔符来区分各个选定的值。以下是对这个主题的详细解析: 首先,`...

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

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

    网页模板——仿苹果风格的CheckBox复选框代码.zip

    网页模板设计中,仿苹果风格的CheckBox复选框代码是一个重要的设计元素,它能够为网站带来独特的视觉体验和一致的用户交互。苹果公司的设计语言以其简洁、优雅和易用性著称,许多开发者和设计师都会尝试在自己的项目...

    PB带复选框的树形控件

    1. **自定义控件**:由于PowerBuilder的标准控件库可能不直接提供带复选框的树形控件,开发者需要通过自定义控件或者使用第三方库来实现。这可能涉及到创建新的窗口对象,编写自定义的事件处理函数,以及对控件外观...

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

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

    彩色图形复选框

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

Global site tag (gtag.js) - Google Analytics