`

jquery之live(), delegate(), on() 方法

阅读更多
通过下面的一个实例理解 jQuery 的 live(), delegate(), on() 方法

How to bind event to element after generated?
页面元素如何在生成后绑定事件?


Question:

I have this script :

$(window).load(function () {
    $(document).on('click', '.btn-delete-confirm', function () {...});
});


and I have this element :

<div id="attachments"></div> 


and I have another script to load some html :

$(document).on('click', '.nav-tabs li a[href="#attach"]', function () {

    $.ajax({
        url: loadAttachmentsURL,
        data: { equipmentId: equipmentId },
        success: function (data) {
            $("#attachments").html(data);
        }
    });

});

in my result from ajax I have some button that have .btn-delete-confirm class
but when clicked on them nothing happen .

the sample of result like this :

<td><a  data-id="73b2db39-199c-845c-8807-6c6164d2d97d" 
        data-url="/Admin/EquipmentAttachment/Delete" 
        class="btn-delete-confirm btn">Delete</a></td>


how can I resolve this ?



Answer:

I would like to know which version of jQuery are you using?
According to the jQuery documentation:
.live() could have been used to bind events to future elements, but it has been deprecated.

.delegate() and .on() can be used for this
purpose now.  I can see that the code you wrote uses .on().
This should work fine unless you are not using version 1.7+.


引用


The .on() method attaches event handlers to the currently selected set of elements in the jQuery object.

As of jQuery 1.7, the .on() method provides all functionality required for attaching event handlers.

  - For help in converting from older jQuery event methods, see .bind(),  .delegate(), and .live().
  - To remove events bound with .on(), see .off().
  - To attach an event that runs only once and then removes itself, see .one()



引用

.delegate( selector, eventType, handler ) - Returns: jQueryversion deprecated: 3.0

Description:
Attach a handler to one or more events for all elements that match
the selector, now or in the future, based on a specific set of root elements.

// jQuery 1.4.3+
$( elements ).delegate( selector, events, data, handler );
// jQuery 1.7+
$( elements ).on( events, selector, data, handler );


$( "table" ).delegate( "td", "click", function() {
  $( this ).toggleClass( "chosen" );
});


$( "table" ).on( "click", "td", function() {
  $( this ).toggleClass( "chosen" );
});



Examples:

$( "body" ).delegate( "p", "click", function() {
    $( this ).after( "<p>Another paragraph!</p>" );
});





------------------------------------------------------------------

Answer 2:

You are trying to add an eventlistener to something that isnt there yet.
This will result in an error, and the event wont fire again.

So try to add the listener AFTER the ajax import.

$(document).on('click', '.nav-tabs li a[href="#attach"]', function () {

    $.ajax({
        url: loadAttachmentsURL,
        data: { equipmentId: equipmentId },
        success: function (data) {
            $('#attachments').html(data);
            $('.btn-delete-confirm').on('click', function () {...});
        }
    });
});


comments:
- I dont want to repeat the same code .
- your answer destroys the elegance of delegation of events for dynamic elements.












-
引用请注明:
原文出处:http://lixh1986.iteye.com/blog/2341345





-






分享到:
评论

相关推荐

    jQuery中bind(),live(),delegate

    今天我们将深入探讨jQuery中的事件绑定方法,包括`bind()`, `live()`, `delegate()`,以及后来推出的`on()`方法。这四个方法都是为了帮助开发者更方便地管理页面上的事件,特别是对于动态生成的元素。 1. **bind()*...

    jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解

    本文主要探讨了四个常用的事件绑定方法:bind(), live(), delegate(), 和 on(),并提供了实例来帮助理解它们的区别和用途。 1. **bind()**: - `bind()` 是最基础的事件绑定方法,用于向匹配的元素添加一个或多个...

    Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解

    在我们日常开发中经常会使用到.bind()、.live()、.delegate()和.on(),有些同学会对这四者存在一些疑虑,所以下面这篇文章主要给大家介绍了关于Jquery中.bind()、.live()、.delegate()和.on()之间区别的相关资料,...

    浅谈jquery中delegate()与live()

    然而,值得注意的是,从jQuery 1.7版本开始,live()和delegate()方法已被废弃,推荐使用on()方法来替代它们。on()方法是jQuery提供的一个更强大、更灵活的事件委托方法,它允许开发者在指定的元素上绑定一个或多个...

    jQuery的三种bind/One/Live/On事件绑定使用方法

    然而,随着jQuery的发展,为了提供更高效和灵活的事件处理,出现了`one()`、`live()`以及后来的`on()`方法。 1. `bind()` `bind()`是jQuery中最早用于绑定事件的方法,它可以将一个或多个事件处理函数附加到指定...

    jquery中live()方法和bind()方法区别分析

    在 jQuery 1.7 之后,引入了 `on()` 和 `off()` 方法,这两个方法可以替代 `live()`、`bind()` 和 `delegate()` 方法,并且提供了更多的灵活性和强大的事件委托能力。例如,`$(document).on('click', '.selector', ...

    jQuery中 delegate使用的问题

    5. **替代方案**:随着jQuery版本的更新,`live()` 已被弃用,可以使用 `on()` 方法来代替 `delegate()`。 理解并熟练掌握 `delegate()` 方法,能够帮助开发者更高效地处理动态内容的事件绑定,提高代码的可维护性...

    jQuery中的.bind()、.live()和.delegate()之间区别分析

    最后需要指出的是,随着jQuery的更新,.live()和.delegate()方法已被废弃,推荐使用.on()方法来替代。.on()方法提供了更为灵活的事件委托机制,它允许开发者在任何父元素上绑定事件,这样就可以更容易地管理事件监听...

    JS delegate与live浅析

    在jQuery 1.7之后,推荐使用on方法来替代live和delegate方法。on方法是一种更灵活、更强大的方式,它不仅可以实现事件委托,还可以绑定多个事件处理器。其基本用法如下: ```javascript $("#list").on("click", "td...

    jQuery事件 delegate()使用方法介绍

    live()方法已在jQuery 1.7之后被废弃,而delegate()方法也被推荐不再使用,取而代之的是on()和off()方法。 使用delegate()方法的一个示例是,如果你想为一个动态生成的列表中的每个元素绑定点击事件,而列表本身是...

    jQuery中bind,live,delegate与one方法的用法及区别解析

    在jQuery库中,有四种主要的方法用于绑定事件处理程序:`.bind()`, `.live()`, `.delegate()`, 和 `.one()`。这些方法各有特点,适用于不同的场景,下面我们将逐一深入探讨它们的用法和区别。 1. **.bind() 方法** ...

    jQuery中绑定事件bind() on() live() one()的异同

    on() 方法是 jQuery 1.7 之后推荐的事件绑定方式,它替代了 bind()、live() 和 delegate() 方法。on() 方法同样支持为当前和未来的元素绑定事件,并且可以一次绑定多个事件处理器。实际上,on() 方法是一个更为通用...

    jquery例子大全 jquery demo

    `.delegate()` 和 `.live()`(在jQuery 1.7后被 `.on()` 替代)则支持事件代理,使得动态生成的元素也能响应事件。 ### 四、jQuery AJAX jQuery 的 AJAX 功能强大,如 `.ajax()`, `.get()`, `.post()` 等方法使得...

    浅析jQuery事件之on()方法绑定多个选择器,多个事件

    在现代的jQuery版本中,on()方法取代了之前版本中的.bind(), .live(), 和.delegate()方法。 ### on()方法绑定多个选择器、多个事件的关键知识点: 1. **on()方法语法**: - 简单事件绑定:`$(selector).on(events...

    139.jQuery源码分析-魔术方法.rar

    5. `on()`: 事件绑定是jQuery的重要特性,`on()`方法取代了早期的`bind()`、`live()`和`delegate()`,提供了一种统一的事件处理方式。它可以处理当前及未来的元素,增强了事件处理的灵活性。 6. `event....

    jQuery事件绑定on()、bind()与delegate() 方法详解

    之所以有这么多类型的绑定方法,是因为jQuery的版本更新的原因,如on()方法就是1.7以后出现的。 jQuery的事件绑定api页面上,提到live()方法已经过时,不建议使用。所以这里我们主要就看下以下三个方法:bind()、...

    jquery1.4.2 jquery1.4.2

    此外,还引入了一些技巧,如deferred对象和live/delegate事件代理,以减少DOM遍历和内存占用。 总结,jQuery 1.4.2作为一个经典版本,不仅提供了丰富的功能,也奠定了现代前端开发的基础。无论你是初学者还是经验...

    jquery-1.9.1.js 、jquery-1.9.1.min.js 【官方jquery包 js】

    例如,使用`.on()`替代`.bind()`, `.delegate()`, 和`.live()`可以减少内存占用并提高性能。另外,避免全局变量的使用,以及合理地组织和合并CSS选择器,都能提升页面运行效率。 在实际应用中,jQuery广泛应用于...

    jQuery绑定事件方法及区别(bind,click,on,live,one)

    此外,`bind()`、`live()`和`delegate()`在某些早期版本的jQuery中不支持动态创建元素的事件绑定,而`on()`方法解决了这个问题。 了解了这些方法的使用和区别,可以帮助开发者在处理不同情况下的事件绑定时做出更...

Global site tag (gtag.js) - Google Analytics