`
ltl3884
  • 浏览: 135371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery 新建的元素事件绑定问题(上)

阅读更多

我想很多人都会向我一样曾经 被新元素的事件绑定困惑很久也就是
在页面加载完成后给元素绑定了事件,但又新增加的元素上却没有绑定任何事件。

js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现。而事件监听不是,你必须给每一个元素单独绑定事件。

常见的例子是处理表格的时候。每行行末有个删除按钮,点了这个能够删除这一行。

<table>
    
<tbody>
        
<tr>
            
<td>这行原来就有</td>
            
<td><buttonclass="del">删除</button></td>
        
</tr>
        
<tr>
            
<td>这行原来就有</td>
            
<td><buttonclass="del">删除</button></td>
        
</tr>
    
</tbody>
</table>

通常,我会这么绑定

  1. jQuery(function($){
  2.    //已有删除按钮初始化绑定删除事件
  3.     $(".del").click(function() {
  4.         $(this).parents("tr").remove();
  5.    });
  6. });

对于在domready之前就存在的删除按钮,一切都很完美。但如果在domready之后用js动态添加几行,那新增的几行中的这些按钮都将失去任何作用。

如何解决这个问题?以下提供4种解决方案:
=============================
0号解决方案——onclick法
如果不顾结构与行为分离的准则的话,通常,我会这么做。
注意,此时的deltr这个function必须是全局函数,得放jQuery(function($) {})外面,放里边就成局部函数了,html里的onclick就调用不到了!

  1. <td><buttononclick="deltr(this)">删除</button></td>
  1. jQuery(function($){
  2.    //添加行
  3.     $("#add2").click(function(){
  4.         $("#table2>tbody").append('<tr><td>新增行</td><td><button nclick="deltr(this)">删除</button></td></tr>')
  5.    });
  6. });
  7. //删除行的函数,必须要放domready函数外面
  8. function deltr(delbtn){
  9.     $(delbtn).parents("tr").remove();
  10. };

=============================
1号解决方案——重复绑定法
即,在domready的时候就给已有的元素绑定事件处理函数,
而后当新增加的元素的时候再次绑定。

  1. <td><buttonclass="del">删除</button></td>
  1. jQuery(function($){
  2.    //定义删除按钮事件绑定
  3.    //写里边,防止污染全局命名空间
  4.    function deltr(){
  5.         $(this).parents("tr").remove();
  6.    };
  7.    //已有删除按钮初始化绑定删除事件
  8.     $("#table3 .del").click(deltr);
  9.    //添加行
  10.     $("#add3").click(function(){
  11.         $('<tr><td>新增行</td><td><button class="del">删除</button></td></tr>')
  12.            //在这里给删除按钮再次绑定事件。
  13.             .find(".del").click(deltr).end()
  14.             .appendTo($("#table3>tbody"));
  15.    });
  16. });

=============================
2号解决方案——事件冒泡法
利用事件冒泡的原理,我们给这个按钮的祖先元素绑定事件处理函数。
然后通过event.target这个对象来判断,这个事件是不是我们要找的对象触发的。
通常可以利用一些DOM属性,比如event.target.className、event.target.tagName等之类的来判断。

  1. <td><buttonclass="del">删除</button></td>
  1. jQuery(function($){
  2.    //第四个表格的删除按钮事件绑定
  3.     $("#table4").click(function(e) {
  4.        if (e.target.className=="del"){
  5.             $(e.target).parents("tr").remove();
  6.        };
  7.    });
  8.    //第四个表格的添加按钮事件绑定
  9.     $("#add4").click(function(){
  10.         $("#table4>tbody").append('<tr><td>新增行</td><td><button class="del">删除</button></td></tr>')
  11.    });
  12. });
分享到:
评论

相关推荐

    jquery 新建的元素事件绑定问题解决方案

    在DOM加载完成后先给现有的元素绑定事件处理函数,然后在添加新元素时再次为新元素绑定相同事件。这种方法虽然有效,但可能会导致多个事件监听器附加到同一元素上,可能影响性能。例如: ```javascript function...

    jQuery新建文件夹展开缩收代码.zip

    【jQuery新建文件夹展开缩收代码.zip】是一个包含JavaScript特效的资源包,主要利用了jQuery库和Bootstrap.js框架来实现一种模拟文件夹结构的效果。在实际的网页设计和开发中,这种功能常用于构建文件管理系统或者...

    jquery高仿浏览器新建标签页网址缩略图导航特效代码

    jQuery的`$.ajax`或`$.get`方法可以异步获取远程资源,然后将获取到的图标数据绑定到对应的标签页元素上。 5. **收藏功能**:为了实现收藏功能,我们需要存储用户的收藏记录,这可能涉及到本地存储(如localStorage...

    JQUERY demo+api

    3. **事件处理**:jQuery提供了绑定事件的方法,如`$(selector).click(function(){...})`,可以为元素添加点击事件监听器。同时,`$(document).ready()`确保DOM加载完成后再执行函数,避免了页面闪烁问题。 4. **...

    AJAX与jquery试题

    【知识点详解】 1. **jQuery的基本使用*...总结,这个AJAX与jQuery试题主要测试了对jQuery的选择器、DOM操作、事件处理、链式操作以及动态创建元素等基础知识的掌握。解答这些题目需要熟悉jQuery的基本语法和常见API。

    jQuery实战中文版.pdf

    - **事件处理**:利用jQuery可以轻松绑定各种事件处理器。 - **插件扩展**:jQuery提供了丰富的插件机制,可以方便地扩展其功能。 #### 三、jQuery实战应用 - **基础用法**: - 加载jQuery库; - 使用`$(document...

    jquery 教程

    - **新建DOM对象**: 可以使用jQuery动态创建新的DOM元素,并将其插入到页面中。 - **事件处理**: 支持多种事件绑定方式,如`.click()`、`.hover()`等,方便处理用户的交互行为。 - **动画效果**: 提供简单易用的动画...

    JQuery事件委托原理与用法实例分析

    而事件委托则解决了这个问题,只需要在父级元素(如`&lt;ul&gt;`)上绑定一次事件,所有子元素都能响应该事件。 例如,以下代码展示了事件委托的使用: ```javascript $(function () { // 使用事件委托的方式 $('.list...

    jQuery.rar

    1. **jqueryDemo.html**:这可能是一个包含jQuery应用的HTML页面,展示了如何引入jQuery库,并可能包含使用jQuery进行DOM操作、事件绑定和动画效果的实例。 2. **jquery-3.4.1.js**:这是未压缩的jQuery库文件,...

    jquery-1.1.3.1.js,jquery.linscroll.js

    - **事件处理**:通过`.on()`, `.click()`, `.mouseover()`等方法绑定和触发事件。 - **动画效果**:jQuery的`.animate()`方法可以创建自定义动画,`.fadeIn()`, `.slideUp()`等预定义动画则提供常见效果。 2. **...

    jQuery应用技巧大全

    jQuery的事件绑定函数如$.on()、$.off()简化了事件处理。$.on()不仅可以绑定单个事件,还可以一次性绑定多个事件。此外,使用.delegate()或.live()(已被弃用,但理解其原理有益)可以实现事件冒泡和委托,提高性能...

    jquery实例

    事件委托是jQuery中的一个高级技巧,通过在父元素上绑定事件,可以处理子元素的动态添加和删除,提高代码的灵活性。 动画效果是jQuery的一大亮点。`.fadeIn()`, `.slideUp()`, `.animate()`等方法可以创建出流畅的...

    jQuery新建文件夹展开缩收代码

    // 触发展开/缩收事件绑定 applyFolderBehaviors(); } }); }); }); ``` 在这个例子中,当用户提交表单时,一个新的文件夹名被发送到服务器(这里的URL应替换为实际的API地址),然后在服务器返回成功响应后,...

    jQuery实现表格行的动态增加与删除(改进版)

    首先,jQuery的选择器和事件绑定是实现这一功能的关键。通过`$(document).ready()`函数确保在DOM加载完成后执行相关代码。`$("#tab tr")`选择表格的所有行,并设置它们的对齐方式为居中。`$("#but")`则选择了带有...

    jQuery的实现原理的模拟代码 -3 事件处理

    在JavaScript中,事件处理通常通过为DOM元素绑定事件监听器来实现,当相应的事件发生时,监听器会触发一个回调函数。 jQuery作为JavaScript的一个库,提供了一套简化事件处理的API。它封装了底层的事件处理细节,并...

    jQuery很漂亮的标签切换样式

    在IT行业中,jQuery是一款非常流行的JavaScript库,它极大地简化了DOM操作、事件处理以及动画效果。这个"jQuery很漂亮的标签切换样式"是一个示例,展示了如何利用jQuery来创建吸引人的用户体验,尤其是对于企业网站...

    jQuery新建文件夹展开缩收特效代码

    本文将深入探讨“jQuery新建文件夹展开缩收特效代码”这一主题,这是利用jQuery和Bootstrap.js实现的一个功能,允许用户模拟文件夹的展开与收缩,支持多重嵌套,并提供新建文件夹的功能。 首先,jQuery的核心在于它...

    jquery教程

    - **绑定事件**:如 `.click()`, `.hover()`, `.change()` 等方法可以为元素绑定事件。 - **解绑事件**:如 `.off()` 方法可以移除绑定的事件处理函数。 - **动画效果**: - **基本动画**:如 `.fadeIn()`, `....

    jquery 可视化开发工具 ixedit

    通过右侧的属性面板修改元素的样式、属性和绑定的事件。 4. **配置交互**:利用ixEdit的事件编辑器,设置元素之间的交互逻辑,例如点击按钮弹出对话框,或者表单提交时发送Ajax请求。 5. **预览与调试**:在内置的...

Global site tag (gtag.js) - Google Analytics