`

jquery中对动态生成的标签不会响应click事件

 
阅读更多

Jquery中对ajax动态生成的html标签不会响应 $(selector).click(function.. 或者$(selector).bind('click',function.., 需要用.live


 

返回值:jQuerylive(type, [data], fn)

概述

jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。

这个方法是基本是的 .bind() 方法的一个变体。使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有。为此需要再使用一次 .bind() 才行。比如说

 

<body>
  <div class="clickme">Click here</div>
</body>

 

可以给这个元素绑定一个简单的click事件:

 

$('.clickme').bind('click', function() {
  alert("Bound handler called.");
});

 

当点击了元素,就会弹出一个警告框。然后,想象一下这之后有另一个元素添加进来了。

 

$('body').append('<div class="clickme">Another target</div>');

 

尽管这个新的元素也能够匹配选择器 ".clickme" ,但是由于这个元素是在调用 .bind() 之后添加的,所以点击这个元素不会有任何效果。

.live() 就提供了对应这种情况的方法。如果我们是这样绑定click事件的:

 

$('.clickme').live('click', function() {
  alert("Live handler called."); 
});

 

然后再添加一个新元素:

 

$('body').append('<div class="clickme">Another target</div>');

 

然后再点击新增的元素,他依然能够触发事件处理函数。

事件委托

.live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤:

 

  1. 生成一个click事件传递给 <div> 来处理
  2. 由于没有事件处理函数直接绑定在 <div> 上,所以事件冒泡到DOM树上
  3. 事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。
  4. 执行由 .live() 绑定的特殊的 click 事件处理函数。
  5. 这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。
  6. 如果找到了匹配的元素,那么调用原始的事件处理函数。

 

由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。

附加说明

.live() 虽然很有用,但由于其特殊的实现方式,所以不能简单的在任何情况下替换 .bind()。主要的不同有:

 

  • 在jQuery 1.4中,.live()方法支持自定义事件,也支持所有的 JavaScript 事件。在jQuery 1.4.1中,甚至也支持 focus 和 blue 事件了(映射到更合适,并且可以冒泡的focusin和focusout上)。另外,在jQuery 1.4.1中,也能支持hover(映射到"mouseenter mouseleave")。然而在jQuery 1.3.x中,只支持支持的JavaScript事件和自定义事件:click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, 和 mouseup.
  • .live() 并不完全支持通过DOM遍历的方法找到的元素。取而代之的是,应当总是在一个选择器后面直接使用 .live() 方法,正如前面例子里提到的。
  • 当一个事件处理函数用 .live() 绑定后,要停止执行其他的事件处理函数,那么这个函数必须返回 false。 仅仅调用 .stopPropagation() 无法实现这个目的。

 

参考 .bind() 方法可以获得更多关于事件绑定的信息。

在jQuery 1.4.1中,你可以一次绑定多个事件给 .live() ,跟 .bind() 提供的功能类似。

在jQuery 1.4 中,data参数可以用于把附加信息传递给事件处理函数。一个很好的用处是应付由闭包导致的问题。可以参考 .bind() 的讨论来获得更多信息。

参数

typeString

事件类型

data (可选)Object

欲绑定的事件处理函数

fnFunction

欲绑定的事件处理函数

示例

描述:

点击生成的p依然据有同样的功能。

HTML 代码:
<p>Click me!</p>
jQuery 代码:
$("p").live("click", function(){
    $(this).after("<p>Another paragraph!</p>");
});

描述:

阻止默认事件行为和事件冒泡,返回 false

jQuery 代码:
$("a").live("click", function() { return false; });

描述:

仅仅阻止默认事件行为

jQuery 代码:
$("a").live("click", function(event){
  event.preventDefault();
});
分享到:
评论

相关推荐

    jQuery为动态生成的select元素添加事件的方法

    但是,对于动态生成的元素,传统的事件绑定方法可能不会生效,因为当JavaScript代码执行时这些元素可能还不存在。 3. jQuery中的事件委托技术:为了解决动态元素的事件处理问题,jQuery引入了一种名为“事件委托”...

    jquery动态生成树菜单

    本文将详细讲解如何使用jQuery来动态生成树状菜单,这对于构建交互式网页界面至关重要。 首先,理解树菜单的概念。树菜单是一种以层次结构展示信息的用户界面元素,通常用于网站导航或数据分类。它由节点组成,每个...

    jquery 给动态生成的标签绑定事件的几种方法总结

    以下是对jQuery给动态生成的标签绑定事件的几种方法的详细解析: 1. **使用`.on()`方法** `.on()`方法是jQuery 1.7引入的,它是`.bind()`, `.live()`, `.delegate()`等方法的增强版,特别适合处理动态生成的元素...

    jquery无法为动态生成的元素添加点击事件的解决方法(推荐)

    动态生成的元素,即在页面加载后通过JavaScript代码创建的元素,它们在页面初始加载时并不存在于DOM中,因此,直接使用`click`或其他事件绑定方法可能无法监听到这些元素的事件。 标题所提及的问题是“jquery无法为...

    dtree_JQuery实例.动态生成树

    在IT行业中,动态生成树是一种常见的用户界面元素,特别是在数据管理、导航系统或者层级结构展示时。本实例“dtree_JQuery实例.动态生成树”是关于如何利用jQuery库来创建这种交互式的树形结构。jQuery是一个轻量级...

    jQuery实现的动态伸缩导航菜单实例

    鼠标事件是用户与页面交互的主要方式之一,而jQuery提供了click、mouseover、mouseout等多种鼠标事件方法来响应用户的操作。在这个实例中,点击事件(.click)被用来触发导航菜单项的展开与折叠。 动画方法是jQuery中...

    Jquery生成缩略图画廓

    我们将基于提供的标题"Jquery生成缩略图画廓"和描述,讨论如何实现这一功能,特别是涉及到动态绑定图片和对多种图片格式的支持。 首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画...

    jQuery实现动态添加、删除按钮及input输入框的方法

    通过本篇文章,我们将学习如何使用jQuery实现动态添加和删除按钮及input输入框的方法,同时还将涉及到事件响应和页面元素动态操作的相关技巧。 首先,我们需要注意的是,当页面加载完毕后,jQuery的$(document)....

    jQuery动态创建表格生成器代码.zip

    对于动态生成的元素,需使用事件委托,如`.on('click', 'td', function() {...})`,确保事件在新元素上也能正常工作。 6. **CSS样式**:为了实现CSS特效,可以使用jQuery的`.css()`方法改变元素的样式,或者通过...

    jQuery回车创建创建标签代码.zip

    在本文中,我们将深入探讨如何使用jQuery来实现一个功能丰富的标签管理系统,该系统支持用户通过回车键创建、初始化、编辑、删除以及禁用标签。这个功能对于网站或应用程序的用户体验提升有着显著的作用,尤其在内容...

    jQuery动态网页交互设计

    总的来说,jQuery动态网页交互设计的学习涵盖了网页动态生成、动画效果实现、事件响应以及Ajax交互等多个方面,旨在培养开发者构建现代、互动性强的网页应用的能力。通过实践和理解这些知识点,你将能够创造出属于...

    jQuery动态添加删除编辑标签代码.zip

    本项目“jQuery动态添加删除编辑标签代码”聚焦于利用jQuery实现动态的标签管理功能,包括添加、删除和编辑标签,这对于创建交互性强的用户界面尤其有用。以下是对这个项目的详细解析: 1. **jQuery基础**:jQuery...

    jquery 生成图形报表插件

    在本主题中,我们将深入探讨如何使用jQuery生成图形报表插件,特别是基于Highcharts的实现。 Highcharts是一款强大的图表库,完全基于JavaScript,支持多种类型的图表,包括柱状图、折线图、饼图、散点图等,并且...

    JQuery 云标签

    使用jQuery动态生成云标签,并赋予相应的权重效果: ```javascript $(document).ready(function() { var tags = [ { text: "JavaScript", weight: 8 }, { text: "HTML", weight: 6 }, // ... 更多标签数据 ]; ...

    【JavaScript源代码】jQuery实现动态添加标签事件.docx

    在给定的示例中,它演示了如何使用jQuery实现动态添加表格行(tr)以及与之相关的删除事件。以下是这个知识点的详细说明: 1. **动态添加HTML元素**: 当页面加载完成后,可以使用jQuery的`$()`函数创建新的HTML...

    jQuery创建动态事件.zip

    jQuery创建动态事件是这个领域中的一个重要概念,它允许我们根据需要动态地添加和管理事件监听器,为网页元素提供响应用户行为的能力。 jQuery的核心优势之一就是其简洁的API,这在处理事件方面尤为明显。传统的...

    jQuery动态生成订单进度步骤源码.zip

    本资源"jQuery动态生成订单进度步骤源码.zip"显然是一个包含示例代码的压缩包,旨在教授如何使用jQuery来动态创建和管理订单进度条的显示。这种功能常见于电子商务网站,帮助用户跟踪他们的订单状态,从下单到收货的...

    Jquery-easyUI动态菜单

    在这个"Jquery-easyUI动态菜单"项目中,我们将会探讨如何在标准的 Maven 项目中实现动态生成的菜单,以及其在分页和界面交互中的应用。 **1. Maven项目结构与配置** Maven是Java项目管理工具,用于构建、依赖管理和...

    jquery事件

    当动态生成的元素需要绑定事件时,使用事件代理是有效的策略。例如,`$('table').on('click', 'tr', function() {...})`,即使表格中的行是在事件绑定后添加的,点击行也会触发事件处理函数。 5. **事件分离** ...

    详解jQuery向动态生成的内容添加事件响应jQuery live()方法

    jQuery live()方法是给所有匹配的元素附加一个事件处理函数,即使这个元素是以后通过append,prepend,after等事件生成后的内容也依然有效。 这个方法可以看做是 .bind() 方法的一个变体。使用 .bind() 时,选择器匹配...

Global site tag (gtag.js) - Google Analytics