1. 程式人生 > >為動態新增元素新增點選事件所遇到的坑

為動態新增元素新增點選事件所遇到的坑

目的:有一個html,要達到的目的是:當滑鼠進入某一個 li 時,它自動為它新增一個class=“co“,然後再為這個co寫一個點選事件;

<body>
    <div id="aaa">
        <ul>
            <li id="menu1">中華人民共和國</li>
            <li id="menu2">在哪挑花盛開的地方</li>
        </ul>
    </div>
</body>

理想是:$(".co").clock(function(){});就可以了,但理想很豐滿,現實很骨感!這樣達不到目的。通過網上查詢,給出這樣的公式:

$(".box").on('click','.boxchild',function(){
        console.log("aaaa");
    });
它的要求是:在網頁中必須有一個靜態的.box,所謂靜態的就是必須是寫成<div class="box"></div>,這樣的形式,不能用程式求出來的一個 .box;

按照這個要求,我的程式就要寫成這樣:

<script type="text/javascript">
$(function(){
    $("#aaa ul li").hover(function(){      //當滑鼠移入時
           $(this).addClass("co");
    },function(){
           $(this).removeClass("co");              //當滑鼠移出時
    });
    $(“li").on("click",".co",function(){
        alert($(this).html());          
    });
});
</script>

但現實很“骨感",因為在body中,li 不是唯一的,雖然它是真正的存在,但還是沒有點選的效果。此時很鬱悶!

後來,又在網上找到,將

中的$("li")改為$(document),實驗成功。參考文章:https://blog.csdn.net/golden_wheat/article/details/76085153

完整程式碼是:  程式碼後面還有更精彩的,請往下看

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="css/index.css" />
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <!--<script type="text/javascript" src="js/index.js"></script>-->
<script type="text/javascript">
$(function(){
    $("#aaa ul li").hover(function(){
        $(this).addClass("co");
    },function(){
        $(this).removeClass("co");
    });
    $(document).on("click",".co",function(){       //為了防止document中有與你的co類名重名,你可以把co改成一個很奇葩的名字:)
        alert($(this).html());
    });
});
</script>
    <style type="text/css">
    </style>
</head>

<body>
<div id="aaa">
    <ul>
        <li id="menu1">中華人民共和國</li>
        <li id="menu2">在哪挑花盛開的地方</li>
    </ul>
</div>
</body>
</html>

=====================

現在要把它改成分離的形式:

把    <!--<script type="text/javascript" src="js/index.js"></script>-->這一句的註釋拿掉

然後再把

$(function(){
    $("#aaa ul li").hover(function(){
        $(this).addClass("co");
    },function(){
        $(this).removeClass("co");
    });
    $(document).on("click",".co",function(){     //注意  co的前面不要少了點哦!不然沒有效果; 這裡的document如果換成其它的一定要是“唯一”的標籤,你如果用li之類就不行,因為它不是唯一的,光是靜態的不行哦!不然你就哭吧!
        alert($(this).html());
    });
});

這一段程式碼剪下到js/index.js就可以。

===========================================

現在要讓這個程式通用起來,把它寫成一個jQuery的外掛

第一步:寫html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="css/index.css" />
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#aaa ul li").menuAddClassHover(this);
            $("#aaa ul li").menuAddClassClick();
        });
    </script>
    <style type="text/css">
    </style>
</head>

<body>
<div id="aaa">
    <ul>
        <li id="menu1">中華人民共和國</li>
        <li id="menu2">在哪挑花盛開的地方</li>
    </ul>
</div>
</body>
</html>

第二步:寫css檔案,檔名與html的檔名是一樣的,只是字尾為.css, 以後要養成這樣的習慣,為誰寫css就與它一樣。

.cocococcococ{
    background: #ff00ff;
    color: red;
    width:50%;
}
這個css檔案就這樣幾句

第三步:寫jQuery的外掛:檔名index.js   ,外掛的寫法請參考相關的資料

;
(function($){
    $.fn.extend({
        "menuAddClassHover":function(element){
            $(this).hover(function(element){
                $(this).addClass("cocococcococ");
            },function(){
                $(this).removeClass("cocococcococ");
            });
        },
        "menuAddClassClick":function(){
            $(document).on("click",".cocococcococ",function(){
                alert($(this).html());
            })
        }
    });
    
})(jQuery);
 

這樣就可以運行了!完美!!!!!   你可以把這個方法用於選單之中。