關於使用jquery的load方法時被載入頁面內部script失效問題的一次探索

来源:https://www.cnblogs.com/moonfair/archive/2020/04/09/12669627.html
-Advertisement-
Play Games

事先聲明:本文由初學者撰寫,為一次探索的過程,可能有不嚴謹和準確的地方,望讀者多多諒解並積極指正! 場景描述: 在一次前端開發過程中,我使用了一個網頁模板,該模板包含一個主頁和四個子頁面,如下圖: 具體的效果是,點擊主頁中的一個按鈕會在彈框內顯示子頁面的內容,如下圖: 具體的實現是在主頁面中留出面板 ...


事先聲明:本文由初學者撰寫,為一次探索的過程,可能有不嚴謹和準確的地方,望讀者多多諒解並積極指正!

場景描述:

在一次前端開發過程中,我使用了一個網頁模板,該模板包含一個主頁和四個子頁面,如下圖:

 

 

 具體的效果是,點擊主頁中的一個按鈕會在彈框內顯示子頁面的內容,如下圖:

 

 

 

具體的實現是在主頁面中留出面板,併在點擊按鈕時通過jquery的load方法將子頁面載入到面板中:

index.html 部分代碼

<div class="cd-folding-panel">
        
        <div class="fold-left"></div> <!-- this is the left fold -->
        
        <div class="fold-right"></div> <!-- this is the right fold -->
        
        <div class="cd-fold-content">
            <!-- content will be loaded using javascript -->
        </div>

        <a class="cd-close" href="#0"></a>
</div> <!-- .cd-folding-panel -->

 

 main.js 部分代碼

var foldingContent = foldingPanel.find('.cd-fold-content');
foldingContent.load(url+' .cd-fold-content > *', function(event){
    setTimeout(function(){
        $('body').addClass('overflow-hidden');
        foldingPanel.addClass('is-open');
        mainContent.addClass('fold-is-open');
    }, 100);
});

 

 問題描述:

問題主要出在子頁面上,如上圖展示過的,我想要在子頁面實現獲取用戶輸入信息,並提交到伺服器進行查詢,然後將獲取到的json信息以表格的形式展示出來,大概要求的效果是這樣的(不要在意表格的內容,那隻是示例):

 

 

於是我就把相應的代碼寫到了item1.html的<script>標簽中

item1.html(這部分可以不看)

<!doctype html>
<html lang="en" class="no-js">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="css/reset.css"> <!-- CSS reset -->
    <link rel="stylesheet" href="css/style.css"> <!-- Resource style -->
    <script src="js/modernizr.js"></script> <!-- Modernizr -->
      
    <title>線上快遞查詢系統</title>
</head>
<body>
    <div class="cd-fold-content single-page">
        <h2>查快遞</h2>
        <div style="width:80%;height:100px;margin:30px">
            <form id="form1" onsubmit="return false" action="##">
                <input required='' type='text' id="phoneNumber">
                <label alt='請輸入手機號碼' placeholder='手機號碼'></label>
                <input id="queryBtn" type="submit" onclick="postQueryMsg()" value="Submit" >
            </form>
            <div style="height:50px">
            </div>
            <table id="table" class="gridtable" style="display:none">
                <tr>
                     <th>BrandName</th>
                     <th>Modul</th>
                     <th>Quantity</th>
                     <th>Datecode</th>
                     <th>Remark</th>
                </tr>
            </table>
        </div>   
    </div>
<script src="js/jquery-2.1.1.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
<script src="js/main.js"></script> <!-- Resource jQuery -->
<script>
function postQueryMsg(){
    
     $.ajax({
         type:"get",
         url:"resources/haha.json",
         dataType:"json",
         async:false,
         success:function(data){
             var table=document.getElementById("table");
             table.style.display = 'block';
             for(var i=0;i<data.length;i++){
                                     var row=table.insertRow(table.rows.length);
                                     var c1=row.insertCell(0);
                                     c1.innerHTML=data[i].BrandName;
                                     var c2=row.insertCell(1);
                                     c2.innerHTML=data[i].Modul;
                                     var c3=row.insertCell(2);
                                     c3.innerHTML=data[i].Quantity;
                                     var c4=row.insertCell(3);
                                     c4.innerHTML=data[i].Datecode;
                                     var c5=row.insertCell(4);
                                     c5.innerHTML=data[i].Remark;
                                 }
         },
         error:function(errorThrown){
         console.log(errorThrown);
          }
      });
    }
</script>
</body>
</html>
View Code

於是運行在Chrome時出現了 “點擊Submit按鈕沒有反應” 的問題,按F12打開控制台,查找到如下錯誤:

 

 

 發現是由於沒找到 postQueryMsg(我的按鈕點擊方法)的定義造成的,然後我就尋思可能是寫在 item1.html 中的腳本失效了。

上網搜索一下,發現問題在於 jquery 的 load 方法會把被載入頁面的 script 腳本忽視掉,而網路上給出的解決方案也大都不奏效或不能令我滿意。

解決過程:

問題的解決是從我開始深入認識 load 方法開始的:

以下是W3School給出的關於load方法的定義

load() 方法通過 AJAX 請求從伺服器載入數據,並把返回的數據放置到指定的元素中。

由是我註意到這個方法似乎是把被載入頁面 “放入” 載入頁面,那麼主體按理來說是載入頁面,因此如果我把要在被載入頁面運行的腳本放到載入頁面里,應當就可以正常運行了。而控制臺中的報錯信息也證實了我的想法(出錯位置是在 index.html 而不是 item1.html)

 

 

為了保持代碼美觀,這次我使用了外置 js 腳本:

index.html 部分代碼

<script src="js/itemAction.js"></script>

itemAction.js 內容

function postQueryMsg(){
     
 $.ajax({
     type:"get",
     url:"resources/haha.json",
     dataType:"json",
     async:false,
     success:function(data){
         var table=document.getElementById("table");
         table.style.display = 'block';
         for(var i=0;i<data.length;i++){
                                 var row=table.insertRow(table.rows.length);
                                 var c1=row.insertCell(0);
                                 c1.innerHTML=data[i].BrandName;
                                 var c2=row.insertCell(1);
                                 c2.innerHTML=data[i].Modul;
                                 var c3=row.insertCell(2);
                                 c3.innerHTML=data[i].Quantity;
                                 var c4=row.insertCell(3);
                                 c4.innerHTML=data[i].Datecode;
                                 var c5=row.insertCell(4);
                                 c5.innerHTML=data[i].Remark;
                             }
     },
     error:function(errorThrown){
     console.log(errorThrown);
      }
  });
}

 

 如此就能正常運行了

待解決的問題:

就標題而言,這次探索已經圓滿完成,但事實上仍然有一個問題懸而未決,希望路過的大佬能替我指正:

問題一:

在上文中 “問題描述” 部分中,我刻意提及 “在Chrome中” 出現點擊按鈕無反應的問題,原因是我在 IE 瀏覽器中打開界面時是可以運行的,並且控制臺中沒有任何報錯信息:

 

 

 

 

 

 希望各位大佬不吝賜教,謝謝!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建索引 1、單列索引 單列索引是一個只基於表的一個列上創建的索引。基本語法如下: sqlite> CREATE INDEX index_name ON table_name (column_name); sqlite> CREATE INDEX jp_host_addr ON jp_host (a ...
  • (一)什麼是Redis Cluster? Redis Cluster是Redis的分散式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分散式方面的需求。當遇到單機記憶體、併發、流量等瓶頸時,可以採用Cluster架構達到負載均衡的目的。 Redis使用中遇到的瓶頸 我們日常在對於r ...
  • 首先,我們通過一張圖片來瞭解一下Oracle資料庫的記憶體結構,如下: 每個資料庫實例有兩個關聯的記憶體結構—系統全局區(SGA),程式全局區(PGA)。 系統全局(SGA):一組共用的記憶體結構(稱為SGA 組件),其中包含一個OracleDB 實例的數據和控制信息。SGA 由所有伺服器進程和後臺進程共 ...
  • 一、手機版本問題,大多數文章沒有涉及這個點,導致他們的代碼並無法正常使用 M版本以上需要使用的Type--> TYPE_APPLICATION_OVERLAY AlertDialog.Builder builder=new AlertDialog.Builder(getApplicationCont ...
  • 老孟導讀:剛開始看到這個功能的時候一定覺得so easy,開始的時候我也是這麼覺得的,這還不簡單,然而真正寫的時候才發現並沒有想象的那麼簡單。 先上圖,不上圖你們都不想看,我難啊,到Github: "https://github.com/781238222/flutter do" 上給個小星星可還行 ...
  • <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <script> /* 1.創建 1.var arr = new Array(元素列表); 2.var arr = new Array(預設長度); 3.var a ...
  • <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <script> /* Function:函數(方法)對象 1.創建 1.var fun = new Function(形式參數列表,方法體) 2.function ...
  • ` ` 最終的效果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...