在帝国二开中,不开避免的要和jquery打交道。
但是,不知道客户的环境,也许他们已经加载过jquery,也许没有。
那就检查下,如果加载就算了。如果没有,就动态加载。
代码如下:
if(!(window.jQuery)) { var s = document.createElement('script'); var protocolStr = document.location.protocol; s.setAttribute('src', protocolStr+'//apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'); s.setAttribute('type', 'text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); }
实践发现,动态加载的jquery,不能执行window.onload事件:
$(function () { });
控制台会有错误,$没有定义。静态加载的jquery则没有这个问题。
无奈,使用
window.onload=function(){ // 此处为代码 }
加载。在这个函数的内部,是可以使用$对象的。
同时开发两个插件的时候,问题出来了,window.onload只认最后一次定义的,以前的统统覆盖无效。悲剧啊。
百般和度娘交流,采用了这样的方法:
if(window.addEventListener){ window.addEventListener("load",jhcload,false); } else{ window.attachEvent("onload",jhcload); }
来代替,window.onload,问题得到解决。
一个完整的代码例子:
if(!(window.jQuery)) { var s = document.createElement('script'); var protocolStr = document.location.protocol; s.setAttribute('src', protocolStr+'//apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'); s.setAttribute('type', 'text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); } if(window.addEventListener){ window.addEventListener("load",jhcload,false); } else{ window.attachEvent("onload",jhcload); } function jhcload(){ if(!$('#msg_title').length){ $('input[name="title"]').parent('td').append('<span id="msg_title">标题唯一性检测</span>'); } $('input[name="title"]').blur(function(){ var $user_val=$(this).val(); this.value=this.value.replace(/[!!¥……*——+、#$%&'"/=??。,《》<>·^`{|}~“”]|s|-|(|)|[uff00-uffff]/g,''); $.ajax({ data:{ classid: $('input[name="classid"]').val(), title: $('input[name="title"]').val(), sid:Math.random(), id:$('input[name="id"]').val() }, type: "POST", url:"/e/extend/oneTitle/index.php", async:true, dataType:"json", success:function(data){ $('#msg_title').html(data['text']); return false; }, error:function(jqXHR){ alert('检测标题重复时出现错误,请检查相关文件路径'.url); return false; } }); }); }