由于dom结构的改变导致事件处理程序找不到事件主体报错的解决方法
2017-08-11 18:39
309 查看
在编程的过程我们可能给一个dom对象注册了一个事件处理程序,而这个dom对象一开始是不存在的,可能要触发另一个事件才会生成这个dom对象。这时候可能会报错Uncaught TypeError: Cannot set property ‘onclick’ of null找不到事件源
如下面这个例子:为一个按钮button注册一个点击事件,点击后执行一条alert语句。但这个按钮一开始不存在。
如下面这个例子:为一个按钮button注册一个点击事件,点击后执行一条alert语句。但这个按钮一开始不存在。
//由于按钮button还不存在,而函数 btn_click();已经执行了,当然会找不到事件源而报错。 <body> </body> <script type="text/javascript"> window.onload = function(){ btn_click(); show_btn(); } function show_btn(){ document.write(`<button id="btn">按钮</button>`); } function btn_click(){ document.getElementById('btn').onclick = function(){ alert('hello world'); } } </script> //我们可以把函数btn_click()放在函数show_btn()的函数体的末尾执行,这样就确保只有等按钮出现了再给它注册事件处理程序,从而保证了程序的正常运行。 <script type="text/javascript"> window.onload = function(){ show_btn(); } function show_btn(){ document.write(`<button id="btn">按钮</button>`); btn_click(); } function btn_click(){ document.getElementById('btn').onclick = function(){ alert('hello world'); } } </script>
相关文章推荐
- libxml2在iOS4上由于xmlFreeDoc导致程序Crash的解决方法
- ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法
- 关于Ajax控件ModalPopupExtender出现的 未通过 Sys.UI.DomEvent.addHandler 方法添加处理程序的解决方法。
- ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法
- ora-12154 tns 无法处理服务名(执行的程序途径不一致导致,枚举网络数种方法,大家还有其他解决办法?)
- ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法之一
- 解决由于RDPDD.dll failed to load错误事件而导致无法连接远程桌面的方法
- C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法
- 解决WinForm 程序中由于拖拽导致MouseUp事件无法触发的问题
- ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法
- 【转载】ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法
- js事件处理程序的运行环境(改变attachEvent内部的this指向&封装兼容性的 addEvent方法)
- javascript 原生方法监听DOM结构改变事件
- 由于您和其他用户试图同时改变同一数据,导致 Microsoft Jet 数据库引擎停止进程。解决方法
- jquery技巧总结-jQuery对象,集合,方法扩展,事件处理,特效,解决冲突
- 解决Visual Studio 2008编译智能设备程序时找不到头文件的方法
- 改变oracle数据库的ip地址引起的“ORA-12541:TNS:无监听程序”错误解决方法
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- MS DTC无法正确处理DC升级/降级事件解决方法
- 找不到文档关联程序的解决方法