当我们添加事件监听器时,它只会应用于已经存在于DOM中的元素。然而,当我们使用delegate()方法时,事件监听器将会应用于任何新增的元素,甚至是动态生成的元素。下面就来详细讲解一下jQuery delegate()方法的相关内容。
delegate()方法的语法
$(selector).delegate(childSelector,event,data,function)
参数说明:
selector
:必须,用于选中初始元素。childSelector
:必须,用于选中被监听的子元素。event
:必须,表示要监听的事件类型,如click、mouseover等等。data
:可选,传入一个对象,在事件处理函数中可以通过event.data属性获得该对象。一般用于传递描述事件的数据或状态。function
:必须,表示事件发生时要执行的函数(即事件回调函数)。
使用delegate()方法的示例一
下面是一个简单的例子,当用户单击任何新增的按钮时会在控制台中输出文本。如果我们只使用click()方法,那么我们只能针对当前文档中存在的DOM元素添加事件监听器, 这意味着事件将不会被监听到任何新创建的按钮上。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jQuery delegate()方法示例</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#btn-container").delegate("button", "click", function() {
console.log("Button clicked!");
});
$("#add-btn").click(function() {
var btn = $("<button></button>").text("New Button");
$("#btn-container").append(btn);
});
});
</script>
</head>
<body>
<div id="btn-container">
<button>Old Button</button>
</div>
<button id="add-btn">Add Button</button>
</body>
</html>
在上面的代码中,我们首先通过delegate()
方法将#btn-container
内的所有button
元素绑定了click
事件监听器。当监听到该事件时,控制台将会打印“Button clicked!”的提示信息。而通过单击Add Button按钮,我们可以动态地向文档中添加新的按钮元素。
使用delegate()方法的示例二
有时我们需要根据数据来创建不同的元素,例如一系列数字需要以列表的形式呈现,可以根据数字来动态创建相应的li元素。这个时候,我们可以使用delegate()
方法对这些元素进行事件监听。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jQuery delegate()方法示例</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#number-list').delegate("li", "click", function() {
alert($(this).text());
});
// 动态添加 li 元素
for (var i = 0; i < 10; i++) {
var li = $("<li></li>").text(i);
$("#number-list").append(li);
}
});
</script>
</head>
<body>
<ul id="number-list">
</ul>
</body>
</html>
在上面的代码中,我们使用了delegate()
方法对ul元素下的所有li元素进行点击事件的监听,当li元素被点击时,将会弹出一个包含当前li元素内容的alert对话框。而动态创建li元素的过程则需要在页面DOM结构及脚本加载完成后运行。
以上就是关于jQuery delegate()
方法的详细介绍及相关示例。