如何对相同的元素绑定同样事件且互相不会收到影响?

2016-08-19  本文已影响0人  lMadman
$(document).ready(function () {
    var result = [];    //定义一个空数组
    var oDiv = document.getElementsByClassName("node");     //获取相同元素块最外层的class集合
    for (var i = 0; i <oDiv.length; i++) {    //遍历
        (function (i) {
            $('#text-' + i).bind('click', function () {    //给每一个相同的元素设置click事件
                if ($(this).attr("class") == 'section6-text weixuan') {    //选中时元素的样式
                    $('#duihao-' + i).css('backgroundColor', '#3697e9');
                    $('#text-' + i).find('.text-middle').css('backgroundColor', '#fff');  //text-i,即写死的id,text-0,text-1...
                    $('#text-' + i).find('.htitle').css('backgroundColor', '#fff');
                    $(this).removeClass('weixuan');
                    result[i] = $('#text-' + i).find("h6").html();    //如果选中,获取元素中的值,存到数组中
                } else {      //未选中或者选中又取消时,元素的样式
                    $('#duihao-' + i).css('backgroundColor', '');
                    $('#text-' + i).find('.text-middle').css('backgroundColor', '');
                    $('#text-' + i).find('.htitle').css('backgroundColor', '');
                    $(this).addClass('weixuan');
                    result[i] = "";    //如果元素没被选中,存到数组为“ "" ”
                }
                e.stopPropagation();    //阻止事件冒泡
            });
        })(i)
    }
}); 

我们还需要一个提交按钮,来提交选中的元素内容,设定一个提交按钮

$('.submit').on('click', function () {
//在提交时,我们需要判断result[]数组是否为空,一般通过数组的长度。
//而上面我们定义的数组本来就有长度,所以不能直接判断result.length == 0;
//这里我把数组toString()转换成了字符串,之后用以个正则表达式匹配所有逗号去掉。
    var str = result.toString().replace(/,/g, '');    
    if (str == null || str == undefined || str == '') {  //如果字符串去掉逗号后没内容,及数组为空
        $('.message2').css('display', 'block');   //设置提示信息并2秒后自动消失
       setTimeout(function () {
            $(".message2").css("display", "none");
        }, 2000);
    } else {
        $.grep(result, function (n) {
            return $.trim(n).length > 0;
        });
        $.post("/pc/daiyunying/add", {    //提交
                    "result": result,
                    "_token": "{{csrf_token()}}"
                },
                function (data) {
                    if (data == "success") {    //根据返回码进行判断提示不同的信息
                        $('.message').css('display', 'block');
                        setTimeout(function () {
                            $(".message").css("display", "none");
                        }, 2500);
                    } else {
                        $('.bangding').click()     
                   }
                });
    }
});

来看一下html代码:

<div class="node">
    <div class="section6-text weixuan" id="text-10">
        <div class="col-md-2 col-sm-3 htitle"><h6>优化运营报告</h6></div>
        <div class="col-md-9 col-sm-8 text-middle">
            <div class="p">根据内容运维数据、用户行为数据、模块应用数据给出优化运营建议</div>
        </div>
        <div class="col-md-1 col-sm-1 p duihao" id="duihao-10">
            <div><span class="glyphicon glyphicon glyphicon-ok xuanzhong" aria-hidden="true"></span>  
          </div>
        </div>
    </div>
</div>

html代码都是这样重复的,主要用在不是从后台取数据,前台写死的服务,让用户根据自己的需求去选择。

样式部分这里不做详细的讲解,可以给据设计去自己写,大概效果如下:

鼠标移上去的效果 选中的效果-PC端 选中的效果-移动端
上一篇 下一篇

猜你喜欢

热点阅读