我想很多人都会向我一样曾经 被新元素的事件绑定困惑很久也就是
在页面加载完成后给元素绑定了事件,但又新增加的元素上却没有绑定任何事件。
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>
通常,我会这么绑定
-
jQuery(function($){
-
//已有删除按钮初始化绑定删除事件
-
$(".del").click(function() {
-
$(this).parents("tr").remove();
-
});
-
});
对于在domready之前就存在的删除按钮,一切都很完美。但如果在domready之后用js动态添加几行,那新增的几行中的这些按钮都将失去任何作用。
如何解决这个问题?以下提供4种解决方案:
=============================
0号解决方案——onclick法
如果不顾结构与行为分离的准则的话,通常,我会这么做。
注意,此时的deltr这个function必须是全局函数,得放jQuery(function($) {})外面,放里边就成局部函数了,html里的onclick就调用不到了!
-
<td><buttononclick="deltr(this)">删除</button></td>
-
jQuery(function($){
-
//添加行
-
$("#add2").click(function(){
-
$("#table2>tbody").append('<tr><td>新增行</td><td><button nclick="deltr(this)">删除</button></td></tr>')
-
});
-
});
-
//删除行的函数,必须要放domready函数外面
-
function deltr(delbtn){
-
$(delbtn).parents("tr").remove();
-
};
=============================
1号解决方案——重复绑定法
即,在domready的时候就给已有的元素绑定事件处理函数,
而后当新增加的元素的时候再次绑定。
-
<td><buttonclass="del">删除</button></td>
-
jQuery(function($){
-
//定义删除按钮事件绑定
-
//写里边,防止污染全局命名空间
-
function deltr(){
-
$(this).parents("tr").remove();
-
};
-
//已有删除按钮初始化绑定删除事件
-
$("#table3 .del").click(deltr);
-
//添加行
-
$("#add3").click(function(){
-
$('<tr><td>新增行</td><td><button class="del">删除</button></td></tr>')
-
//在这里给删除按钮再次绑定事件。
-
.find(".del").click(deltr).end()
-
.appendTo($("#table3>tbody"));
-
});
-
});
=============================
2号解决方案——事件冒泡法
利用事件冒泡的原理,我们给这个按钮的祖先元素绑定事件处理函数。
然后通过event.target这个对象来判断,这个事件是不是我们要找的对象触发的。
通常可以利用一些DOM属性,比如event.target.className、event.target.tagName等之类的来判断。
-
<td><buttonclass="del">删除</button></td>
-
jQuery(function($){
-
//第四个表格的删除按钮事件绑定
-
$("#table4").click(function(e) {
-
if (e.target.className=="del"){
-
$(e.target).parents("tr").remove();
-
};
-
});
-
//第四个表格的添加按钮事件绑定
-
$("#add4").click(function(){
-
$("#table4>tbody").append('<tr><td>新增行</td><td><button class="del">删除</button></td></tr>')
-
});
-
});
分享到:
相关推荐
在DOM加载完成后先给现有的元素绑定事件处理函数,然后在添加新元素时再次为新元素绑定相同事件。这种方法虽然有效,但可能会导致多个事件监听器附加到同一元素上,可能影响性能。例如: ```javascript function...
【jQuery新建文件夹展开缩收代码.zip】是一个包含JavaScript特效的资源包,主要利用了jQuery库和Bootstrap.js框架来实现一种模拟文件夹结构的效果。在实际的网页设计和开发中,这种功能常用于构建文件管理系统或者...
jQuery的`$.ajax`或`$.get`方法可以异步获取远程资源,然后将获取到的图标数据绑定到对应的标签页元素上。 5. **收藏功能**:为了实现收藏功能,我们需要存储用户的收藏记录,这可能涉及到本地存储(如localStorage...
3. **事件处理**:jQuery提供了绑定事件的方法,如`$(selector).click(function(){...})`,可以为元素添加点击事件监听器。同时,`$(document).ready()`确保DOM加载完成后再执行函数,避免了页面闪烁问题。 4. **...
【知识点详解】 1. **jQuery的基本使用*...总结,这个AJAX与jQuery试题主要测试了对jQuery的选择器、DOM操作、事件处理、链式操作以及动态创建元素等基础知识的掌握。解答这些题目需要熟悉jQuery的基本语法和常见API。
- **事件处理**:利用jQuery可以轻松绑定各种事件处理器。 - **插件扩展**:jQuery提供了丰富的插件机制,可以方便地扩展其功能。 #### 三、jQuery实战应用 - **基础用法**: - 加载jQuery库; - 使用`$(document...
- **新建DOM对象**: 可以使用jQuery动态创建新的DOM元素,并将其插入到页面中。 - **事件处理**: 支持多种事件绑定方式,如`.click()`、`.hover()`等,方便处理用户的交互行为。 - **动画效果**: 提供简单易用的动画...
而事件委托则解决了这个问题,只需要在父级元素(如`<ul>`)上绑定一次事件,所有子元素都能响应该事件。 例如,以下代码展示了事件委托的使用: ```javascript $(function () { // 使用事件委托的方式 $('.list...
1. **jqueryDemo.html**:这可能是一个包含jQuery应用的HTML页面,展示了如何引入jQuery库,并可能包含使用jQuery进行DOM操作、事件绑定和动画效果的实例。 2. **jquery-3.4.1.js**:这是未压缩的jQuery库文件,...
- **事件处理**:通过`.on()`, `.click()`, `.mouseover()`等方法绑定和触发事件。 - **动画效果**:jQuery的`.animate()`方法可以创建自定义动画,`.fadeIn()`, `.slideUp()`等预定义动画则提供常见效果。 2. **...
jQuery的事件绑定函数如$.on()、$.off()简化了事件处理。$.on()不仅可以绑定单个事件,还可以一次性绑定多个事件。此外,使用.delegate()或.live()(已被弃用,但理解其原理有益)可以实现事件冒泡和委托,提高性能...
事件委托是jQuery中的一个高级技巧,通过在父元素上绑定事件,可以处理子元素的动态添加和删除,提高代码的灵活性。 动画效果是jQuery的一大亮点。`.fadeIn()`, `.slideUp()`, `.animate()`等方法可以创建出流畅的...
// 触发展开/缩收事件绑定 applyFolderBehaviors(); } }); }); }); ``` 在这个例子中,当用户提交表单时,一个新的文件夹名被发送到服务器(这里的URL应替换为实际的API地址),然后在服务器返回成功响应后,...
首先,jQuery的选择器和事件绑定是实现这一功能的关键。通过`$(document).ready()`函数确保在DOM加载完成后执行相关代码。`$("#tab tr")`选择表格的所有行,并设置它们的对齐方式为居中。`$("#but")`则选择了带有...
在JavaScript中,事件处理通常通过为DOM元素绑定事件监听器来实现,当相应的事件发生时,监听器会触发一个回调函数。 jQuery作为JavaScript的一个库,提供了一套简化事件处理的API。它封装了底层的事件处理细节,并...
在IT行业中,jQuery是一款非常流行的JavaScript库,它极大地简化了DOM操作、事件处理以及动画效果。这个"jQuery很漂亮的标签切换样式"是一个示例,展示了如何利用jQuery来创建吸引人的用户体验,尤其是对于企业网站...
本文将深入探讨“jQuery新建文件夹展开缩收特效代码”这一主题,这是利用jQuery和Bootstrap.js实现的一个功能,允许用户模拟文件夹的展开与收缩,支持多重嵌套,并提供新建文件夹的功能。 首先,jQuery的核心在于它...
- **绑定事件**:如 `.click()`, `.hover()`, `.change()` 等方法可以为元素绑定事件。 - **解绑事件**:如 `.off()` 方法可以移除绑定的事件处理函数。 - **动画效果**: - **基本动画**:如 `.fadeIn()`, `....
通过右侧的属性面板修改元素的样式、属性和绑定的事件。 4. **配置交互**:利用ixEdit的事件编辑器,设置元素之间的交互逻辑,例如点击按钮弹出对话框,或者表单提交时发送Ajax请求。 5. **预览与调试**:在内置的...