jquery为动态添加生成的元素添加绑定事件 delegate

在jQuery中 , 有时候会用到 $().append 方法。

但为添加元素绑定事件的时候无效

<div class="q">
        qqq
</div>

js

<script src='http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'></script>
    <script>
    $('.q>div').click(function(argument) {
        console.log('www')
    })

    $('.q').append('<div>www</div>')
    </script>

控制未打印 'www'

解决办法 $().on

<script src='http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'></script>
    <script>
    $('.q').on('click','div',function(argument) {
        console.log('www')
    })

    $('.q').append('<div>www</div>')
    </script>

但是注意下面的写法是错误的。

<script src='http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'></script>
    <script>
    $('.q>div').on('click',function(argument) {
        console.log('www')
    })

    $('.q').append('<div>www</div>')
    </script>

一定要把动态添加的元素放到on()方法里面才行。  

正确写法。  

$('外面包裹的大元素').on('事件','动态添加的元素',function(argument) {
       
    })


还有一个

jQuery 事件 - delegate() 方法

jQuery 事件参考手册

实例

当点击鼠标时,隐藏或显示 p 元素:

$("div").delegate("button","click",function(){
  $("p").slideToggle();
});

亲自试一试

定义和用法

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

使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。

语法

$(selector).delegate(childSelector,event,data,function)
参数描述
childSelector必需。规定要附加事件处理程序的一个或多个子元素。
event

必需。规定附加到元素的一个或多个事件。

由空格分隔多个事件值。必须是有效的事件。

data可选。规定传递到函数的额外数据。
function必需。规定当事件发生时运行的函数。

亲自试一试 - 实例

向未来的元素添加事件处理程序
如何使用 delegate() 方法向尚未创建的元素添加事件处理程序。


与本文有关的文章

express/ multer 上传图片文件 html图片延迟加载 一段奇葩Javascript代码引发的思考 JavaScript两个变量交换值(不使用临时变量) ES6中Math对象的部分扩展 JavaScript中为什么string可以拥有方法? 前端js中经常出现的算法总结 canvas粒子瀑布 canvas纺纱飘带 JavaScript求最长公共子串 JavaScript中的__proto__ JS判断访问设备或型号 js获取url?后的参数 js键盘keyCode对照表 页面鼠标滚动事件 对象克隆或拷贝不是赋值 URL参数含有中文出现乱码 es6常用的的语法大集合 js中的this关键字 js中实现 a*寻路算法 js中用 '==' 还是 '===' web性能优化 reflow(回流)与repaint(重绘) 7年前端大神总结出的js经验 scroll事件常用到的场景,以及判断 js中深度拷贝与浅拷贝 requirejs基础知识 判断参数是什么类型?array?object? 有趣的js基础选择题 js中哪些值能作为if的条件,if使用小技巧 js中键盘按下事件keydown js中的!function到底是什么意思? AMD与CMD的区别到底在哪? Array与Math属性 方法一览 js中的栈与堆 jquery为动态添加生成的元素添加绑定事件 delegate 自己常用的正则(regexp)整理 57秒读完《10 分钟学会 JavaScript 的 Async/Await》 最简单的数组去重 js中数字调用方法 illegal invocation 一般是什么错误? jq或者原生js动态加载js文件方法 jq点击复制某值踩过的坑 个人常用封装的js插件 jq实现table表格排序 select默认选中某个option jquery京东首页banner源码 正则表达式提取cookie 原生ajax写法 js倒计时方法 js 时间戳相关操作方法 手机端元素卡片滑动 jquery.touchSwipe.min.js 手机触屏触摸特效javascript-TouchSwipe介绍 html关于页面跳转url带参数 indexOf,charAt,subString的简要区别 JS页面返回带参数或者保持原有位置 js中的钩子机制(hook) vue中的addClass removeClass 基于JQ的分页插件pagination.js &#x(unicode编码后的汉字)JS转译方法-nodejs爬虫转译乱码 es6/7 js数组深拷贝和数组合并方法 【html5】原生JS控制video的播放和暂停切换 前端 fetch 前端 PWA? js处理手机号|身份证中间替换成 * 号 js时间戳转换为本地时间 timestamp>localtime es6中 数组位置对换 js 数组对象循环各种方法以及性能对比 js实用黑科技之生产随机数 js加密之AES es6遍历对象方法 form表单post提交不刷新页面 js删除字符串的的方法 JS中的Array长度最大可以设置为多少? html img加载失败的话替换成默认图片 图片压缩插件 lrz.bundle.js jq、js中判断checkbox是否选中 JQUERY实时监听input值变化 js手机号中间四位变成*号 javascript 到底要不要加分号 酷炫烟雾效果的前端js插件 waterpipe.js js稀奇古怪问题之指向 现代浏览器和触摸设备上重新排序拖放列表 - Sortable.min.js 一个监听键盘的js库 - hotkeys.js canvas操作图片合成 或文字叠加 并导出base64 jq.fileupload上传文件 服务的nodejs接收 demo 字符转换-unicode <=> ASCII js删除某一个指定元素 禁止 百度ueditor过滤script link js正则效验金额最多两位小数 原生js获取元素offsetTop值不准确? 浏览器控制台跳过debugger 打乱数组顺序的两种方法 js 中的 bind介绍 原生js移除元素 document.removeElementById ?? js string进制互转 input 点击选择全部文本 点击全选 js点击复制input的值 JS/JQ获取各种屏幕的高度和宽度 闭包之[[Scopes]]属性 JS操纵html5 audio 播放以及暂停 原生js 给dom添加 onmouseenter ontouchstart 事件 Js charCodeAt fromCharCode parseInt js位操作教程 js byte[] 和string 相互转换 UTF-8 data URI 转 image data 原生JS实现 addClass removeClass hasClass JS实现为动态添加的元素增加事件 js查找页面中alert弹窗位置 JS实现Jquery的addClass,removeClass,changeClass,toggleClass HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换 JavaScript如何转换二进制数据显示成图片 Uint8Array转成可用的imgurl es6数组快速删除指定元素 支付宝小程序与微信小程序的不同点对比 JS数组按数字的大小排序 js对象数组按照对象属性排序 js点击按钮播放音乐
回到顶部