jQuery 事件

来源:https://www.cnblogs.com/py-web/archive/2020/03/23/12551166.html
-Advertisement-
Play Games

事件註冊單個事件註冊語法: $('div').click(function () { 處理的事情 })$('div').click(function () { $(this).css('backgroundColor', 'red') });$('div').mouseenter(function ... ...


事件註冊

  • 單個事件註冊

語法: $('div').click(function () { 處理的事情 })

$('div').click(function () {
   $(this).css('backgroundColor', 'red') });

$('div').mouseenter(function () {
    $(this).css('backgroundColor', 'black')  })

事件處理

on 綁定事件

因為普通註冊事件方法的不足,jQuery又創建了多個新的事件綁定方法bind() / live() / delegate() / on()等,其中最好用的是: on()

  • 可以綁定1個或者多個事件
$('div').on({
    click: function () {
      pass},

    mouseenter: function () {
      pass }
 })
  • 如果處理的事件是相同的
$('div').on("mouseenter mouseleave", function () {
    $(this).toggleClass('current') })
  • on 實現事件委托(委派)
$('ul').on('click', 'li', function () {
    alert('111') })
  • on 可以動態給未來創建的元素添加事件
$('ol').on('click', 'li', function () {
    alert(222)
})
var li = $('<li>lo的li</li>')
$('ol').prepend(li)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }

        .current {
            background-color: purple;
        }
    </style>
    <script src="jquery.min.js"></script>
</head>

<body>
    <div></div>
    <ul>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
    </ul>
    <ol>

    </ol>
    <script>
        $(function () {
            // 1. 單個事件
            $('div').click(function () {
                $(this).css('backgroundColor', 'red')
            });
            $('div').mouseenter(function () {
                $(this).css('backgroundColor', 'black')
            })

            $('div').on({
                click: function () {
                    pass
                },
                mouseenter: function () {
                    pass
                }
            })

            // 2. 事件處理, 可以綁定1個或者多個
            $('div').on({
                click: function () {
                    $(this).css('backgroundColor', 'red')
                },
                mouseenter: function () {
                    $(this).css('backgroundColor', 'blue')
                },
                mouseleave: function () {
                    $(this).css('width', '300px')
                }
            })

            // 2.1 如果處理程式相同
            $('div').on("mouseenter mouseleave", function () {
                $(this).toggleClass('current')
            })

            // 2.2 on可以實現事件委托(委派)
            $('ul').on('click', 'li', function () {
                alert('111')
            })

            // 2.3 on 可以給為來動態創建的的元素綁定事件
            $('ol').on('click', 'li', function () {
                alert(222)
            })
            var li = $('<li>lo的li</li>')
            $('ol').prepend(li)

        })


    </script>
</body>

</html>
示例代碼
<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0
        }

        ul {
            list-style: none
        }

        .box {
            width: 600px;
            margin: 100px auto;
            border: 1px solid #000;
            padding: 20px;
        }

        textarea {
            width: 450px;
            height: 160px;
            outline: none;
            resize: none;
        }

        ul {
            width: 450px;
            padding-left: 80px;
        }

        ul li {
            line-height: 25px;
            border-bottom: 1px dashed #cccccc;
            display: none;
        }

        input {
            float: right;
        }

        ul li a {
            float: right;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>

        $(function () {
            $('.btn').on('click', function () {
                var li = $('<li></li>')
                li.html($('.txt').val() + "<a href='javascript:;'> 刪除</a>")
                $("ul").prepend(li);
                li.slideDown(); // 下滑
                $('.txt').val('')
            })

            $('ul').on('click', 'a', function () {
                $(this).parent().slideUp(function () {  // 上滑
                    $(this).remove();
                });
            })

        })

    </script>
</head>

<body>

    <div class="box" id="weibo">
        <span>微博發佈</span>
        <textarea name="" class="txt" cols="30" rows="10"></textarea>
        <button class="btn">發佈</button>
        <ul>
        </ul>
    </div>
</body>

</html>
案例-微博
off 事件解除
  • 全部解除
 $('div').off()
  • 解除某一項事件
$('div').off('click')
  • 解除事件委托
$('ul').off('click', 'li')
  • 只運行一次事件
$('p').one('click', function () {
    console.log('one');

})
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function () {
            $('div').on({
                click: function () {
                    console.log('click');
                },
                mouseover: function () {
                    console.log('mouseover');
                }
            })

            $('ul').on('click', 'li', function () {
                console.log('li');

            })

            // 1. off div身上的全部程式解綁
            $('div').off()

            // 1.1 off 解除某一項事件
            $('div').off('click')

            // 1.3 off 解除事件委托
            $('ul').off('click', 'li')

            // 2. one() 但是它只能觸發事件一次
            $('p').one('click', function () {
                console.log('one');

            })


        })


    </script>
</head>

<body>
    <div></div>
    <ul>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
        <li>我們都是好孩子</li>
    </ul>
    <p>我是屁</p>
</body>

</html>
示例代碼
自動觸發事件

jQuery 為我們提供了兩個自動觸發事件 trigger() 和 triggerHandler() ;

  • 元素.事件()
$('div').click()
  • 元素.trigger("事件")
$('div').trigger('click')
  • 元素.triggerHandler("事件") 就是不會觸發元素的預設行為
$("input").triggerHandler("focus");
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function () {
            $('div').on('click', function () {
                alert(111)
            })

            // 自動觸發事件
            // 1. 元素.事件()
            $('div').click()

            // 2. 元素.trigger("事件")
            // $('div').trigger('click')
            // $('input').trigger('focus')

            // 3. 元素.triggerHandler("事件") 就是不會觸發元素的預設行為
            // $('div').triggerHandler('click')
            // $("input").on("focus", function () {
            //     $(this).val("你好嗎");
            // });
            $("input").triggerHandler("focus");


        })


    </script>
</head>

<body>
    <div></div>
    <input type="text">
</body>

</html>
示例代碼
事件對象

語法:

e 就是事件對象

$('div').on('click', function (e) {
    pass
 )}
  • e.stopPropagation() // 阻止事件冒泡
  • e.preventDefault() // 阻止預設行為
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function () {
            $(document).on('click', function () {
                console.log('點擊了document');

            })

            $('div').on('click', function (e) {
                console.log('點擊了DIV');
                // console.log(e);
                e.stopPropagation() // 阻止事件冒泡
                e.preventDefault() // 阻止預設行為

            })



        })
    </script>
</head>

<body>
    <div></div>
</body>

</html>
示例代碼
對象拷貝

$.extend([deep], target, obj1, [objN])

  • deep: true為深拷貝, false為淺拷貝
  • target: 要拷貝的目標對象
  • obj1: 待拷貝的第一個對象的對象
  • objN:待拷貝的第N對象的對象
  • 淺拷貝:拷貝的是記憶體引用,修改目標對象會影響被拷貝對象
  • 深拷貝:是完全克隆,不會影響被拷貝對象
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="jquery.min.js"></script>
    <script>
        $(function () {
            // 1
            // var targetObj = {};
            // var obj = {
            //     id: 1,
            //     name: "andy"
            // };
            // $.extend(targetObj, obj);
            // console.log(targetObj);

            // 2
            // var targetObj = {
            //     id: 0
            // };
            // var obj = {
            //     id: 1,
            //     name: "andy"
            // };

            // $.extend(targetObj, obj);
            // // 會覆蓋targetObj 裡面原來的數據
            // console.log(targetObj);

            // 3
            var targetObj = {
                id: 0,
                msg: {
                    sex: '男'
                }
            };
            var obj = {
                id: 1,
                name: "andy",
                msg: {
                    age: 18
                }
            };
            // 淺拷貝
            $.extend(targetObj, obj);
            console.log(targetObj);  // 會覆蓋targetObj 裡面原來的數據, 包括 msg 裡面的數據  msg: {age: 20}
            targetObj.msg.age = 20;  // 淺拷貝添加 msg.age = 20
            console.log(targetObj);  // msg: {age: 20}
            console.log(obj);  // 被拷貝對象也會改變 msg: {age: 20}

            // 深拷貝
            $.extend(true, targetObj, obj);
            console.log(targetObj);  // 完全複製一份給目標對象 如果裡面有不衝突的屬性,會合併到一起 
            targetObj.msg.age = 20;
            console.log(targetObj); // msg :{sex: "男", age: 20}
            console.log(obj); // {age: 18}  被拷貝對象不變


        })
    </script>
</head>

<body>

</body>

</html>
示例代碼
插件

懶載入

懶載入只需引入html 和 js操作 即可,此插件不涉及css。

  • 引入js
<script src="js/EasyLazyload.min.js"></script>
<script>
   	lazyLoadInit({
   		showTime: 1100,
   		onLoadBackEnd: function(i, e) {
     		console.log("onLoadBackEnd:" + i);
   		},
   		onLoadBackStart: function(i, e) {
     		console.log("onLoadBackStart:" + i);
   		}
 	});
</script>
  • 引入html
 <img data-lazy-src="upload/floor-1-3.png" alt="">


相關資料: https://github.com/1515806183/html-code/tree/master/jQuery-03


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新聞/News 1. "Android 11有新玩法:雙擊手機背部截屏/進入多任務界面" 1. "Android 11 DP2證實了類似AirDrop的附近文件分享功能" 1. "谷歌發佈Camera Go:即使入門機也能有出色肖像模式" 1. "Android高級防護功能已限制非Play商店的應用 ...
  • 一、練習一個3D播放器 1.註意點:動畫中如果有和預設樣式同名的屬性,會覆蓋預設樣式中同名的屬性 2.在編寫動畫的時候,固定不變的值寫在前面,需要變化的值寫在後面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <titl ...
  • 在app.json中可以設置所有文件的頭部導航顏色 (是window屬性的子屬性) 在具體頁面可以單獨設置該頁面的導航顏色 (直接寫該屬性,不需要寫window屬性) 查看官方文檔,可以看到好多全局屬性 而頁面配置會覆蓋部分window配置 在post.json中添加: { "navigationB ...
  • 已經許久沒有更新博客了,並不是疫情阻擋了我寫作的步伐,只是寫作已轉移到word(整理一下去換稿酬,拿了稿酬可以去換酒錢)。如下圖所示,書《Vue.2x實踐指南》交稿快半年了,由於疫情原因,預計下個月底才能上架,《Javascript實訓教程》已完成寫稿60%,《React和Mogodb實訓》籌劃中。 ...
  • 新建目錄 posts (閱讀頁面) 點擊目錄右鍵新建page 目錄結構如下: 在app.json中,把posts調整為預設顯示的頁面(暫時先這樣,具體的多頁面之後再說) { "pages": [ "pages/posts/posts", "pages/welcome/welcome" ], "win ...
  • JavaScript面向對象, 註意啦在這其實面向對象是一種編程的方式,它的思想是通用的,因此 我強烈的建議你去查看我在python,面向對象編程中做的筆記。 面向對象與面向過程 這裡還是相對比較容易理解的,這是兩種截然不同的編程方式。 | |面向過程 | 面向對象 | | : |: :| :| | ...
  • 一、Bootstrap Table列寬拖動的方法 Bootstrap Table可拖動列,需要用到它的Resizable擴展插件 需要引入 bootstrap-table擴展插件 bootstrap-table-resizable.js 這個插件還依賴於colResizable v1.6(下載地址: ...
  • 組件化的思想 將一個頁面中的處理邏輯放在一起,處理起來就會很複雜,不利於後續管理和擴展。 如果將頁面拆分成一個個小的功能塊,每個功能塊實現自己的內容,之後對頁面的管理和維護就變得很容易了。 註冊組件的基本步驟 1.創建組件構造器 2.註冊組件 3.使用組件 //創建組件構造器對象 const cpn ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...