事件委托一般用于动态生成的元素中使用,如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
    .item{
        width:100px;
        height:100px;
        background:#1ABC9C;
    }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
    <div>
        <ul>
            <li class="item">
                <div class="title">
                    今天天气不错
                </div>
                <p class="desc">xxxxxxs</p>
            </li>
            <li class="item">2</li>
            <li class="item">3</li>
            <li class="item">4</li>
                
        </ul>
    </div>
<script type="text/javascript">
    $(function(){
  
        var lio = "<li class='item'>5</li>";
        $("ul").append(lio);

        $("li.item").click(function(){
  /*动态生成的li5 是不会执行点击事件*/
}) })
</script> </body> </html>

解决这个问题我们就要利用事件捕捉的原理

$(function(){
        $("div > ul").on("click",function(event){
            var e = event.target;
            /*事件委托*/
            if( e.className == "item"){
                alert("li.item");
            }
        });
        var lio = "<li class='item'>5</li>";
        $("ul").append(lio);


    })

 

在上面解决的方案中,并不是直接给li绑定事件,而是给所有的li父级元素绑定事件.根据事件扑捉的原理,事件会自上而下传递给li,

我们只需要通过一些简单的条件判断来确定我们的目标元素即可;

posted on 2016-07-11 10:05  良1  阅读(188)  评论(0编辑  收藏  举报