dom 自定义事件_pix4D生成dom

dom 自定义事件_pix4D生成dom之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下:1.事件失效的原因:(1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了(2)同样,当你使用varaa=docu

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下:

1. 事件失效的原因:

(1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了

(2)同样,当你使用var aa = document.getElementsByTagName(“动态生成的元素”);来获取动态生成的元素的时候也是获取不到的,因为网页只会执行一次初始化绑定,之后动态生成的dom元素也是监测不到的。

2. 解决办法:

(1)在每一个动态生成的地方都再绑定多一次事件,比如这个博客里面的例子

(2)把bind改用live,因为live是实时监测的,对于新增的dom元素也是有效的(因为不断去绑定、判断,所以可能会影响Web性能问题)

(3)把bind改用delegate,因为delegate是实时监测的。

(4)在jquery1.7 起版本用on替代了bind()、live() 和 delegate() 方法。

3. 关于最近遇到的事件失效的原因:在原本的网页中(代码可见https://github.com/UFOwl/ife/tree/master/stage02/task16),我想要获取table里面动态生成的删除按钮,帮删除按钮绑定删除时间,可是删除事件失效,因为删除按钮是动态生成的,初始化事件绑定的时候,获取到的table里面的button已经是空的,所以绑定的一直都是空元素,所以点击button按钮的时候一直没有反应。

4. 最后的解决办法:先获取table,然后再绑定table的click事件(因为table是在原本已经存在的dom元素),然后当点击事件触发的时候再捕获事件的target(比如点击table里面的button,这个时候因为已经动态生成button并append进去table里面了,所以button是存在的,此时target指的是button),然后再进行相应的操作。

注意:在这里注意两个问题:

(1)table里面的元素是已经添加进入table里面了的,所以点击那个button的时候,e.target获取到的就是button

(2)为什么已经将button这些元素添加进入table里面,可是还是没能获取到呢,因为是init()这个函数初始化的时候获取table里面的button,可是此时还未进行任何操作,所以获取到的就是空,所以没绑定任何元素。

上面需要注意的两个问题要分清楚,这个是问题的关键。

5.关于bind:每次绑定事件之后事件会一直绑定着,除非用unbind解绑之后再重新绑定,要不然事件会一直存在,所以这就是为什么在做项目的时候,有时候ajax请求的结果会出现1,2,4,8这样叠加,是因为如果用了bind,每次触发事件都会绑定一次操作,所以触发第一次的时候,ajax请求一次;第二次的时候,ajax请求1+1=2次;第三次就是1+2+1=4次;第四次就是1+2+4+1=8次,以此类推。所以如果利用bind绑定事件的话,要先unbind解绑元素原本有的事件再绑定事件,才不会导致ajax请求多次。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194917.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jenkins批量执行任务实践

    jenkins批量执行任务实践1、下载插件Multijobplugin2、创建MultijobJobname:对应job的路径Killthephaseon:设置未never表示前面的job失败也不会关掉后面的job选择并行还是串行:parallel表示并行,sequentially表示串行最终显示3、配置公共参数在Multijob中增加参数构建此时设置的参数为后面所有job的参数;如果之前的job也增加了参数构建,则原有的参数会被覆盖…

    2022年5月8日
    96
  • 职业社交网站为何比微博更有价值

    职业社交网站为何比微博更有价值

    2021年8月18日
    56
  • Unity Odin从入门到精通(二):创建编辑器窗口「建议收藏」

    Unity Odin从入门到精通(二):创建编辑器窗口「建议收藏」前言:为了更加快速和高效的组织项目数据,开发者可以使用Odin来快速创建自定义编辑器窗口,以帮助组织项目数据。这就是Odin可以真正帮助提升工作流程的地方。

    2022年7月21日
    13
  • 如何安装Pycharm_pycharm安装教程2020

    如何安装Pycharm_pycharm安装教程2020安装方法:1、安装配置好Python环境;2、从官网下载pycharm安装程序;3、直接双击下载好的exe文件,进入安装向导界面,按照指示一步步操作;4、点击Install进行安装,等待安装完成后,点击Finish结束安装即可。本教程操作环境:windows7系统、Python3.5.2版本、DellG3电脑。首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址http…

    2022年8月25日
    4
  • MapReduce编程案例系列篇(01-15)

    MapReduce编程案例系列篇(01-15)由于本人最开始接触大数据工作,主要以写MapReduce程序为主,虽然现在有流行的言论称MapReduce这种运行很慢的分布式计算编程框架将要被各种内存计算框架取代。但是MapRedcue也会吸收很多流行的内存计算的各种优点,我相信,将来,MapReduce绝对不会沦落到要淘汰的地步。甚至会后来居上。在此,本人总结一篇关于MapReduce编程的各种典型应用场景编程案例,便于大家查阅学习…

    2022年6月17日
    33
  • linux修改程序文件内容,linux 批量修改文件内容

    linux修改程序文件内容,linux 批量修改文件内容如果有批量修改文件内容的需求,可参考下面这些方法1.批量查找某个目下文件的包含的内容,例如:#grep-rn或l”要找查找的文本”路径或文件rn表示匹配查找字符串的内容显示出来和行号rl表示匹配查找字符串的文件名全部显示出来比如grep-rn”aaa”/usr/local/表示/use/local目录下所有匹配”aaa”的字符串和行号grep-rl”aaa”…

    2022年7月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号