非侵入式JavaScript
✍ dations ◷ 2024-12-23 01:18:51 #JavaScript,响应式网页设计
非侵入式JavaScript是一种将Javascript从HTML结构抽离的设计概念,避免在HTML标签中夹杂一堆onchange、onclick等属性去挂载Javascript事件,让HTML与Javascript分离,依模型-视图-控制器的原则将功能权责清楚区分,使HTML也变得结构化容易阅读。这个名称并不是正式定义,它的基本原则包括:
传统上,JavaScript脚本通常与HTML文件的标签放在一起。例如,以下是在HTML中注册JavaScript事件进程的典型方法:
<input type="text" name="date" onchange="validateDate()"/>
HTML标签的目的通常是描述文件的排版结构,而不是网页操作的程序行为。两者的结合或许会对网站的可维护性产生负面影响,例如将呈现和内容相结合。在HTML中创建和引用的JavaScript脚本行为,例如在单一元素上设置多个不同事件的进程,或在多个元素上设置相同的事件进程,或者在使用事件委派时,结果可能难以使用和维护。
非侵入式方案是以编程方式注册需要的事件进程,而不是和网页元素内嵌在一起。不同于前述那样添加一个onchange
属性,相关的元素改用简单的标识,例如以class
,id
属性和它们值当成脚本参考的标识,或标记中一些其它的方式:
<input type="text" name="date" id="date" />
当页面首次加载到浏览器中时,运行的脚本可以查找每个相关元素,并相对应地进行设置:
window.addEventListener("DOMContentLoaded",function(event){ document.getElementById('date').addEventListener("change",validateDate); });
非侵入式JavaScript应尽量减少将对象添加到运行环境,或全局的名前空间中。其它脚本有可能覆盖掉全局名前空间中,所创建的任何变量或函数;而这将导致发生不预期的结果时,却难以调试的困扰。JavaScript并没有内置明确的名前空间机制,但利用语言设计很容易可产生需求的效果。Flanagan建议以Java编程的开发风格,将开发人员自己的域名反转,作为全球独一的名前空间发布。