爱收集资源网

一键登录:让你的网站页面更便捷

网络整理 2023-09-29 05:02

前提

有一个公共的登陆弹框页面须要在多个页面引用,百度后就使用了jQuery的load技巧。

做法:

将公共的html页面提取下来,置于一个独立的HTML文件中。

之后在须要使用的html页面中,使用jQuery的load方式进行引用即可。

注:提取的部份,不须要包含多余的

、等标签,只须要放置你所用到的标签即可。

用法:

具体代码如下:

//HTML部份:

//js部份:

//当前页面的js文件

$(function(){

/*公共部份:登陆弹框*/

$("#login_box").load("../../template/login/login.html");

})

//引入的公共登入页面的js文件

不想看代码的可以看图:

carriage.js文件中的部份html代码如下所示

#9:a:8:b:8:8:4:8:1:5:9:4:2:4:e:a:7:f:6:6:a:b:6:2:b:1:7:6:f:8:b:9#

login.js文件中的部份js代码如下所示:

#5:e:3:6:4:a:c:7:1:0:2:d:b:9:1:5:3:3:f:1:d:2:b:9:0:8:b:b:f:4:6:8#

发觉问题

注:这儿以关掉按键(即.layer-close-icon元素)为例,进行了测试和调试。

代码运行后发觉:登陆弹框页面中所有元素的绑定风波都没有被触发。点击关掉按键也没有反应。

控制台调试后发觉:在为$(".layer-close-icon")注册点击风波时,根本就没有找到该元素。【如右图所示】

#a:4:a:e:c:4:8:e:9:8:c:1:8:b:a:f:f:d:a:5:e:4:6:f:0:7:f:7:0:3:2:a#

在控制台查看当前的HTML结构,发觉:此时,登陆框并没有被加载进来。所以,页面元素目前还不存在,其实获取不到该元素,也就不能为它注册点击风波了。【如右图所示】

#2:a:4:f:f:b:0:d:e:f:6:5:a:8:c:6:b:5:1:f:e:3:1:4:f:4:e:d:8:4:c:0#

后来思索了很久,也问了一下朋友,得出一个推论:这与页面中js文件的加载和执行次序有关系。

页面上的js代码是HTML页面的一部份,所以js在页面装载时的执行次序就是其引入标签的出现次序。

标签上面的js代码或则通过src引入的外部js,都是根据其句子出现的次序执行,并且执行过程是文档装载的一部份。

当页面中的DOM元素全部加载完毕后就执行jQuery中的$(document).ready(function(){})方式,或缩写为:$(function(){})。

若果在执行.ready()方式之前有js代码存在,这么会先执行ready()方式之前的js代码,之后再执行.ready()方式。

解决问题

之后通过百度搜了一段时间,忽然发觉一个似乎可行的解决方式:jQuery中的$.getScript()方式。

为何说其实可行呢?一是没见过,二是没用过,三是觉得应当没问题。

经过测试,发觉确实可行。具体代码如右图所示:

#7:b:7:c:7:e:d:b:9:1:0:7:0:c:5:8:8:5:a:9:b:7:3:9:9:9:3:e:6:9:1:1#

jQuery.getScript()函数用于动态加载JS文件,并在全局作用域下执行文件中的JS代码。

请注意:该函数是通过异步方法加载数据的。不要直接在jQuery.getScript()执行后直接调用该js文件中的变量或函数。

结束语

至此,问题就早已被解决了。

后来朋友又给我提供了一个新的思路:

加载完HTML文件以后,使用js动态创建一个script标签,之后通过它的src属性,指向你所要引入的js文件的路径。

但是load方式可以使用一个反弹函数作为第二个参数,所以我们可以在反弹函数中动态的将js文件加载进来。

具体代码如下所示:【亲测可行】

$(function(){

/*公共部份:登陆弹框*/

$("#login_box").load("../../template/login/login.html",function(){

varsc=document.createElement("script");

sc.src="../../template/login/login.js";

$("body").append(sc);

});

/*$.getScript("../../template/login/login.js",function(){

//alert("载入成功!");

});*/

})

参考资料:

引入js文件没有用
相关文章