js 事件委托- 多元素节点的选中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./jquery.js"></script>
</head>
<body>
    <table>
        <tbody>
            <tr><td><input type="checkbox" name="ips[]" value="1"></td><td>1</td></tr>
            <tr><td><input type="checkbox" name="ips[]" value="2"></td><td>2</td></tr>
            <tr><td><input type="checkbox" name="ips[]" value="3"></td><td>3</td></tr>
            <tr><td><input type="checkbox" name="ips[]" value="4"></td><td>4</td></tr>
            <tr><td><input type="checkbox" name="ips[]" value="5"></td><td>5</td></tr>
        </tbody>
    </table>


    <button>查看结果</button>
    <div id="resule"></div>

</body>
</html>
<script>
    /**
     *  使用委托模式给相同的元素节点进行事件绑定
     *  日历表
     *  多选列表
     *
     *  原理 : 在最小元素的父类上绑定事件, 将需要触发的事件委托给父类.
     *
     */

    var tbody = $('tbody');
    var button = $('button');
    var nodeArr = new Array();

    // 事件委托绑定.
    tbody.on('click',function(e){
        var e = e || window.event,
                tar = e.target || e.srcElement;
        if(tar.nodeName.toLowerCase() === 'input')
        {
            var index = $(tar).val();
            var state = $(tar).prop("checked");
            nodeArr[index]= state;
        }
    });

    // 在console中显示结果.
    button.on('click',function(){
        var newArr = filterArray(nodeArr);
        console.log(newArr);
    });

    /**
     *  过滤节点, 只保留被选中的.
     * @param arr
     * @returns {*}
     */
    function filterArray(arr) {
        if (!(arr instanceof Array)) return false;
        var keys = new Array();
        for (var i in arr) {
            if (typeof(arr[i]) === 'undefined') continue;
            if (arr[i] === false) continue;
            keys[keys.length] = i;
        }
        return keys;
    }


</script>

 

转载于:https://my.oschina.net/u/1579560/blog/1098863

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值