首頁 web前端 js教程 jquery動態新增點擊事件步奏詳解

jquery動態新增點擊事件步奏詳解

May 25, 2018 pm 01:36 PM
jquery 事件 點選

這次帶給大家jquery動態新增點擊事件步奏詳解,jquery動態加入點擊事件的注意事項有哪些,以下就是實戰案例,一起來看一下。

當我們試著綁定一些事件到DOM元素上的時候,通常會使用以下的四個方法
bind(),on(),live( ),delegate()大家應該用的較多的是前兩種方法。以下是我對四種方法的理解:

  • Bind(): .bind()是最直接的綁定方法,會綁定指定函數和事件到DOM上,這種方法很好的解決了瀏覽器在事件處理中的相容問題,但這個方法還有一些問題。程式碼:

$( "#members li a" ).bind( "click", function( e ) {} ); 
$( "#members li a" ).click( function( e ) {} );
登入後複製

上面的兩行程式碼完成的任務都是一樣的,就是把event handler 加到全部符合的a元素上。這裡存在著一些效率方面的問題,一方面,我們隠式地吧點擊事件加到了所有的a標籤上,這個過程是昂貴的;另一方面在執行的時候也是一種浪費,因為他們都是做了同一件事卻執行了很多次(我們可以把它們hook到它們的父元素,透過冒泡可以對它們中的每一個進行區分,然後在執行這個event handle)。
優點

  • 這個方法提供了一個在各種瀏覽器之間對事件處理的兼容性解決方案

  • 非常方便的綁定事件到元素上

  • .click(), .hover()...這些非常方便的時間綁定,都是bind的一種簡化處理方式

  • 對於利用ID選出來的元素是非常好的,不僅僅是很快的可以hook上去(頁面只能有一個id),而且當事件發生時,handler可以立即被執行(相當於後面的live,delegate)實作方式

缺點

  • ##它會綁定事件到所有被篩選出來的元素上

  • 它不會綁定到在它執行完成後動態新增的那些元素上

  • #當被篩選出來的元素很多時,會出現效率問題

  • 當頁面載入完成的時候,才可以進行bind(),所以可能產生效率問題。


.live().live()方法用到了事件委託的概念來處理事件的綁定。它和用.bind()來綁定事件是一樣的。 .live()方法會綁定對應的事件到你所選擇的元素的根元素上,也就是在
document元素上。那麼所有透過冒泡上來的事件都可以用這個相同的handler來處理了。它的處理機制是這樣的,一旦事件冒泡到document上,jQuery將會找selector/event metadata,然後決定那個handler應該被呼叫。不過在最新的jquery版本好像被刪掉了。

$( "#members li a" ).live( "click", function( e ) {} );
登入後複製

優點:

  • 這裡僅有一次的事件綁定,綁定到document上而不像.bind()那樣給所有的元素挨個綁定

  • 那些動態添加的elemtns依然可以觸發那些早先綁定的事件,因為事件真正的綁定是在document上

  • 你可以在document ready之前就可以綁定那些需要的事件

缺點:

    # #從1.7開始已經不被推薦了,所以你也要開始逐步淘汰它了。
  • Chaining沒有被正確的支援
  • #當使用event.stopPropagation()是沒用的,因為都要到達document
  • #因為所有的selector/event都被綁定到document,
  •  所以當我們使用matchSelector方法來選出那個事件被呼叫時,會非常慢


  • #當發生事件的元素在你的DOM樹中很深的時候,會有performance問題

.Delegate()
.delegate()有点像.live(),不同于.live()的地方在于,它不会把所有的event全部绑定到document,而是由你决定把它放在哪儿。而和.live()相同的地方在于都是用event delegation.推荐使用.delegate() 代替.live()

$( "#members" ).delegate( "li a", "click", function( e ) {} );
登入後複製

优点:

  • 你可以选择你把这个事件放到那个元素上了 chaining被正确的支持了

  • jQuery仍然需要迭代查找所有的selector/eventdata来决定那个子元素来匹配,但是因为你可以决定放在那个根元素上,所以可以有效的减小你所要查找的元素。

  • 可以用在动态添加的元素上

缺点:

  • 需要查找那个那个元素上发生了那个事件了,尽管比document少很多了,不过,你还是得浪费时间来查找。


.On()
其实.bind(), .live(), .delegate()都是通过.on()来实现的,.unbind(), .die(), .undelegate(),也是一样的都是通过.off()来实现的,这是1.8.2的源码:

$( "#members li a" ).on( "click", function( e ) {} ); 
$( "#members li a" ).bind( "click", function( e ) {} ); 
// Live
$( document ).on( "click", "#members li a", function( e ) {} ); 
$( "#members li a" ).live( "click", function( e ) {} );
// Delegate
$( "#members" ).on( "click", "li a", function( e ) {} ); 
$( "#members" ).delegate( "li a", "click", function( e ) {} );
登入後複製

优点:

  • 提供了一种统一绑定事件的方法

  • 仍然提供了.delegate()的优点,当然如果需要你也可以直接用.bind()

缺点:

  • 也许会对你产生一些困扰,因为它隐藏了一前面我们所介绍的三种方法的细节。

结论:

  • 用.bind()的代价是非常大的,它会把相同的一个事件处理程序hook到所有匹配的DOM元素上

  • 不要再用.live()了,它已经不再被推荐了,而且还有许多问题

  • .delegate()会提供很好的方法来提高效率,同时我们可以添加一事件处理方法到动态添加的元素上。

  • 我们可以用.on()来代替上述的3种方法

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

CSS选择器使用方法总结

webkit-font-smoothing字体抗锯齿渲染使用案例详解

以上是jquery動態新增點擊事件步奏詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
jQuery引用方法詳解:快速上手指南 jQuery引用方法詳解:快速上手指南 Feb 27, 2024 pm 06:45 PM

jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網站開發中,它簡化了JavaScript編程,並為開發者提供了豐富的功能和特性。本文將詳細介紹jQuery的引用方法,並提供具體的程式碼範例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫。可以透過CDN連結的方式引入,也可以下載

jQuery中如何使用PUT請求方式? jQuery中如何使用PUT請求方式? Feb 28, 2024 pm 03:12 PM

jQuery中如何使用PUT請求方式?在jQuery中,發送PUT請求的方法與發送其他類型的請求類似,但需要注意一些細節和參數設定。 PUT請求通常用於更新資源,例如更新資料庫中的資料或更新伺服器上的檔案。以下是在jQuery中使用PUT請求方式的具體程式碼範例。首先,確保引入了jQuery庫文件,然後可以透過以下方式發送PUT請求:$.ajax({u

jQuery小技巧:快速修改頁面所有a標籤的文本 jQuery小技巧:快速修改頁面所有a標籤的文本 Feb 28, 2024 pm 09:06 PM

標題:jQuery小技巧:快速修改頁面所有a標籤的文字在網頁開發中,我們經常需要對頁面中的元素進行修改和操作。使用jQuery時,有時候需要一次修改頁面中所有a標籤的文字內容,這樣可以節省時間和精力。以下將介紹如何使用jQuery快速修改頁面所有a標籤的文本,同時給出具體的程式碼範例。首先,我們需要引入jQuery庫文件,確保在頁面中引入了以下程式碼:&lt

使用jQuery修改所有a標籤的文字內容 使用jQuery修改所有a標籤的文字內容 Feb 28, 2024 pm 05:42 PM

標題:使用jQuery修改所有a標籤的文字內容jQuery是一款受歡迎的JavaScript庫,被廣泛用於處理DOM操作。在網頁開發中,經常會遇到需要修改頁面上連結標籤(a標籤)的文字內容的需求。本文將介紹如何使用jQuery來實現這個目標,並提供具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫。在HTML檔案中加入以下程式碼:

jQuery如何移除元素的height屬性? jQuery如何移除元素的height屬性? Feb 28, 2024 am 08:39 AM

jQuery如何移除元素的height屬性?在前端開發中,經常會遇到需要操作元素的高度屬性的需求。有時候,我們可能需要動態改變元素的高度,而有時候又需要移除元素的高度屬性。本文將介紹如何使用jQuery來移除元素的高度屬性,並提供具體的程式碼範例。在使用jQuery操作高度屬性之前,我們首先需要了解CSS中的height屬性。 height屬性用於設定元素的高度

了解jQuery中eq的作用及應用場景 了解jQuery中eq的作用及應用場景 Feb 28, 2024 pm 01:15 PM

jQuery是一種流行的JavaScript庫,被廣泛用於處理網頁中的DOM操作和事件處理。在jQuery中,eq()方法是用來選擇指定索引位置的元素的方法,具體使用方法和應用場景如下。在jQuery中,eq()方法選擇指定索引位置的元素。索引位置從0開始計數,即第一個元素的索引是0,第二個元素的索引是1,依此類推。 eq()方法的語法如下:$("s

如何使用 PHP 建立基於事件的應用程式 如何使用 PHP 建立基於事件的應用程式 May 04, 2024 pm 02:24 PM

在PHP中建構基於事件的應用程式的方法包括:使用EventSourceAPI建立事件來源,並在客戶端使用EventSource物件監聽事件。使用伺服器傳送的事件(SSE)傳送事件,並在客戶端使用XMLHttpRequest物件監聽事件。一個實用的例子是在電子商務網站中使用EventSource即時更新庫存計數,在伺服器端透過隨機更改庫存並發送更新來實現,客戶端則透過EventSource監聽庫存更新並即時顯示。

使用jQuery為表格新增一行的方法介紹 使用jQuery為表格新增一行的方法介紹 Feb 29, 2024 am 08:12 AM

jQuery是一個受歡迎的JavaScript函式庫,廣泛用於網頁開發。在網頁開發過程中,經常需要透過JavaScript動態地在表格中新增一行。本文將介紹如何使用jQuery為表格新增一行,並提供具體的程式碼範例。首先,我們需要在HTML頁面中引入jQuery函式庫。可以透過以下程式碼在標籤中引入jQuery庫:

See all articles