日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效

發(fā)布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Write By Monkeyfly

以下內(nèi)容均為原創(chuàng),如需轉(zhuǎn)載請注明出處。

前提

有一個公共的登錄彈框頁面需要在多個頁面引用,百度后就使用了jQuery 的 load 方法。

做法:

將公共的 html 頁面提取出來,放在一個獨立的 HTML 文件中。

然后在需要使用的 html 頁面中,使用 jQuery 的 load 方法進行引用即可。

注:提取的部分,不需要包含多余的、等標簽,只需要放置你所用到的標簽即可。

用法:

jQuery 中的 load 方法

jQuery.load() AJAX 函數(shù)詳解

具體代碼如下:

//HTML部分:

//js部分:

//當前頁面的js文件

$(function(){

/*公共部分:登錄彈框*/

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

})

//引入的公共登錄頁面的js文件

不想看代碼的可以看圖:

carriage.js 文件中的部分 html 代碼如下所示

login.js 文件中的 部分 js 代碼如下所示:

發(fā)現(xiàn)問題

注:這里以 關(guān)閉按鈕 (即 .layer-close-icon 元素)為例,進行了測試和調(diào)試。

代碼運行后發(fā)現(xiàn):登錄彈框頁面中所有元素的綁定事件都沒有被觸發(fā)。點擊關(guān)閉按鈕也沒有反應。

控制臺調(diào)試后發(fā)現(xiàn):在為 $(".layer-close-icon") 注冊點擊事件時,根本就沒有找到該元素。【如下圖所示】

在控制臺查看當前的 HTML 結(jié)構(gòu),發(fā)現(xiàn):此時,登錄框并沒有被加載進來。所以,頁面元素目前還不存在,當然獲取不到該元素,也就不能為它注冊點擊事件了。【如下圖所示】

后來思考了許久,也問了一下同事,得出一個結(jié)論:這與頁面中 js 文件 的加載和執(zhí)行順序有關(guān)系。

頁面上的js代碼是HTML頁面的一部分,所以js在頁面裝載時的執(zhí)行順序就是其引入標簽的出現(xiàn)順序。

標簽里面的 js 代碼 或者 通過 src 引入的外部 js,都是按照其語句出現(xiàn)的順序執(zhí)行,而且執(zhí)行過程是文檔裝載的一部分。

當頁面中的 DOM 元素全部加載完畢后就執(zhí)行jQuery 中的 $(document).ready(function(){})方法,或簡寫為:$(function(){})。

如果在執(zhí)行 .ready() 方法之前有 js 代碼存在,那么會先執(zhí)行 ready()方法 之前的 js 代碼,然后再執(zhí)行 .ready()方法。

參考資料: 淺談js在html中的加載執(zhí)行順序,多個jquery ready執(zhí)行順序

解決問題

然后通過百度搜了一段時間,突然發(fā)現(xiàn)一個貌似可行的解決方法: jQuery 中的 $.getScript() 方法。

搜到的答案如下:

(點擊查看)jquery load 加載html 但是html包含的js不生效 ,求助!!

為什么說貌似可行呢?一是沒見過,二是沒用過,三是感覺應該沒問題。

經(jīng)過測試,發(fā)現(xiàn)確實可行。具體代碼如下圖所示:

jQuery.getScript() 函數(shù)用于動態(tài)加載JS文件,并在全局作用域下執(zhí)行文件中的JS代碼。

請注意: 該函數(shù)是通過異步方式加載數(shù)據(jù)的。不要直接在 jQuery.getScript() 執(zhí)行后直接調(diào)用該 js 文件中的變量或函數(shù)。

關(guān)于該方法的詳情,請點擊 jQuery.getScript() 函數(shù)詳解 查看。

結(jié)束語

至此,問題就已經(jīng)被解決了。

后來同事又給我提供了一個新的思路:

加載完 HTML 文件之后,使用 js 動態(tài)創(chuàng)建一個 script 標簽,然后通過它的 src 屬性,指向你所要引入的js文件的路徑。

而且load方法可以使用一個回調(diào)函數(shù)作為第二個參數(shù),所以我們可以在回調(diào)函數(shù)中動態(tài)的將 js 文件加載進來。

具體代碼如下所示:【親測可行】

$(function(){

/*公共部分:登錄彈框*/

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

var sc = document.createElement("script");

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

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

});

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

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

}); */

})

參考資料:

html中引入調(diào)用另一個公用html模板文件的方法

如何讓html引用公共的頭部和尾部(多個html文件公用一個header.html和footer.html)

總結(jié)

以上是生活随笔為你收集整理的js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。