jquery学习 - 对动态创建的元素进行事件响应(bind, live, delegate)

事件响应

其实我们平时对网页上的元素进行响应,例如点击(onclick),更改(onchange)这些事件的时候,都比较简单。因为jquery都封装好了,直接$(‘elementID‘).click()就可以了。

动态添加元素

使用js控制页面的元素添加与删除是非常频繁的一个操作,很容易发现,假如我们的页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- jQuery文件。-->
    <script src="http://www.w3school.com.cn/jquery/jquery.js"></script>
    <script>
        $(document).ready(function() {
            $(‘#btnone‘).click(function() {
                $(‘.row‘).append(‘<button id="btntwo">按钮2</button>‘);
            });

            $(‘#btntwo‘).click(function() {
                alert("click me!");
            });
        });
    </script>
</head>
<body>
    <div class="container">
        <div class="row">
            <button id="btnone">按钮1</button>
        </div>
    </div>
</body>
</html>

可以很容易的看出来,页面上只有一个按钮1,当我们点击的时候会出现一个按钮2,其实我们已经写好了按钮2的点击事件,但是当我们不管怎么点击的时候,发现根本不会有任何变化。

这就是因为其实最开始页面上不存在的元素,jquery的click是没有绑定到元素的。



原因:

因为click或者change这些方法都是用bind来实现的。

对动态元素绑定

既然用bind不能实现,用什么可以实现呢?

  • live()
  • delegate()

这两个都可以实现。这两个方法都可以对未存在于DOM中的元素进行事件响应。所以上面的代码:

$(‘#btntwo‘).click(function() {
                alert("click me!");
            });

要换成如下代码:

$(‘#btntwo‘).live(‘click‘, function() {
                alert("click me!");
            });

或者换成如下代码:

$(document).delegate(‘#btntwo‘, ‘click‘, function() {
                alert("click me!");
            });

就可以生效了。

live和delegate的不同

我通过看W3c live 页面W3c delegate 页面对比后发现。

好像唯一不同的地方在于:

live

live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

delegate

delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

就是delegate是处理的指定元素的子元素。

想学习两个函数的详细用法,可以点击上面两个超链接,查看。

时间: 2024-12-28 20:46:55

jquery学习 - 对动态创建的元素进行事件响应(bind, live, delegate)的相关文章

使用addeventlistener为js动态创建的元素添加事件监听

点击li弹出内容,并且动态添加li之后有效 <button onclick="addFunction()">点我增加</button> <ul></ul> <script type="text/javascript"> var num = 1; var u=document.querySelector("ul"); function addFunction(){ var l=docume

jQuery动态创建html元素的常用方法汇总

在使用jQuery进行WEB程序设计的时候非常有用.分享给大家供大家参考.具体方法如下: 一般来说,可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到数组中,再遍历数组动态创建html元素 3.使用模版 1.使用jQuery动态创建元素追加到jQuery对象上. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <

基于jQuery动态创建html元素

在做web前端开发的时候,经常遇到一些数据多少或则类型不能在运行之前就确定下来的情况,此时,数据的展示,就要借助于动态创建html元素来展示了. 常见的动态创建HTML元素的方式,有如下几种,大体都差不多! html 函数: 1 var eleHtml = "<div id='newone'> xxx </div>'"; 2 jQuery(your_specified_selector).html(eleHtml) append 函数: 1 var eleHtm

jQuery给动态添加的元素绑定事件的方法

jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给动态添加的元素绑定事件在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况 例如 1 <div id="testdiv"> 2 <ul></ul> 3 </div> 需要给<ul>里面动态添加的

JavaScript动态创建HTML元素

用ajax时会用到js的动态创建HTML元素,这里简单的讲一下方法: 先分析一下HTML元素 <span style="font-size:18px;"><body></span> <font color="red" size="12">红色<p>换行</p></font> </body> 包括HTML元素的名称.属性.和内容 <名称 属性1=&

用JS动态创建SVG元素并绑定事件

var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.setAttribute("width", "800"); svg.setAttribute("height", "500"); svg.addEventListener("load", function () {

解决jquery 动态生成的元素的事件无法绑定

一.错误示例:对于自己用脚本动态生成的元素,无法绑定事件.例如: body下的代码: <body> <ul>     <li><span class="class1">11111</span></li>     <li><span class="class1">22222</span></li>     <li><span cla

动态创建的元素怎么做动画

要做动画,一般都是要获取元素的一些基本属性,比如宽,高,颜色等 但是对于动态创建的元素,是不能获取这些属性的 只有插入到dom中,经过渲染才能获取这些属性 但是一旦插入到dom当中,先获取在改变就会有跳动的效果 为了避免这种情况,有两种解决方案 一种是将元素设置绝对定位,获取之后然后在放到正确位置,这种情况一般用在弹出框的居中显示中 一种是将元素设置成visibility:hidden;overflow:hidden;height:0; 然后获取scorllHeight,scrollWidth

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

遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <div> <ul> <li> <span> <i class='icon'>这是元素内容</i> //i是动态生成 </span> </li> </ul> </div> 解决方法如下: $(docu