以前都是用jquery,现在想用原生js,但是发现如果将js写在.js文件里,如果获取了某个元素并执行了click事件,但是别的页面也引用了这个.js,但是他没有那个元素,所以会报错,不知道该怎么弄,(不想将js写在页面里)
沒什麼好困擾的,要嘛寫判斷,要嘛分開寫
通用性js开发,考虑的问题当然多了,一些必要的逻辑判断是需要的。
所以开发通用性js文件,要尽量的抽象化,减少可能涉及到具体的东西.
例如:
var $ = (function(){ function EM(){ this.click = function(el_query, handle , cb ){ var el = document.querySelector(el_query); if(el ){ el.addEventListener( 'click',handle, false ); return; } cb(new Error('element not exist.')); } } var EVJS = new EM; return { onclick:(el_query , handle ,cb ){ EVJS.click( el_query , handle , cb); } } })(); $.onclick('#input' , function(){} , function(err){ if(err){ console.log(err); } })
参数,参数,参数!!!不是共同的地方,用参数!!!!
如果从软件工程的角度来回答这个问题的话,那就是你的代码架构不合理,设计得不好。不是针对这个页面写的代码为什么要让这个页面引用呢?那你可能说这个文件里面有部分代码是各页面共用的,那么共用的和专用的要分开为不同文件,不要混在一起,代码设计的时候就要构思好的。
如果要就事论事,只讨论怎将就这个问题,那也很简单,你要给一个页面元素绑定事件,或者说对他执行某个动作之前,要先判断他存不存在,不存在就不执行,这样就不会因为页面元素不存在而报错了。
比如:
var div = document.getElementById(...);
if (div) {
div.onclick = function () {
......
};
}
又如:
function doSomething(elem) {
if (!elem) return;
......
}