js实现元素的多选,或单选功能

JavaScript011

js实现元素的多选,或单选功能,第1张

效果预览 

html中-css中 - 以ul 和 li标签双层结构为例 

js中

1,定义一个init方法, 完成处理数据 并把最后选中的数据返回

1.通过getArr方法,  挂载了li元素的点击事件liClick方法, 并返回处理好的数据arr,checkbox的话arr里面是多条选中的,radio则为单条

 通过array的特性来达到return返回的数据同步

2.根据传递过来的type类型判断是单选框还是复选框, 来调用不同的处理函数checkboxFun或radioFun

3.checkboxFun完成了复选框的一些数据处理操作  , , radioFun 完成了单选框的一些数据处理操作

2, 获取子元素集合, 并调用init函数, 

init函数调用并会返回一个newArr,   这个newArr就是最新的数据集合

这样就可以实现一个单选多选的功能了

首先两个按钮的name是相同的,可以通过var obj = document.getElementsByName('name')得到这两个按钮对象。然后遍历两个对象obj[0],obj[1] ,obj[i].checked==''或obj[i].checked==false就说明没有选中。

我只能说,你这逻辑明显不对,你应该是要为每一个radio控件绑定onclick事件,点击的时候alert一下。

你的代码有几个错误。

1、getElementsByName("radios")返回的是一个数组,你不能为一个数组对象绑定onclick事件

2、循环绑定js的onclick事件,需要借用闭包或者函数的方式,否则绑定的onclick事件都会是最后一个对象的方法。

以下是我用闭包的方式解决你的绑定方法,你可以看一下,把你的所有js去掉,页面不变,js换成如下代码:

<script type="text/javascript">

    var box = document.getElementsByName("radios")

    // 循环为每个 radio 绑定 onclick 事件

    for (var i = 0 i < box.length i++) {

        (function() {

            var boxone = box[i]

            box[i].onclick = function() {

                // 如果当前的 radio 被选中,则 alert 他的 value

                if (boxone.checked) {

                    alert(boxone.value)

                } 

            }

        })()

    }  

</script>