目錄
核心原理
實現步驟
1. HTML表格結構與動態數據傳遞
2. Bootstrap模態框的定義
3. JavaScript數據填充邏輯
首頁 後端開發 php教程 如何實現Bootstrap模態框動態獲取表格行數據並填充表單

如何實現Bootstrap模態框動態獲取表格行數據並填充表單

Aug 19, 2025 pm 02:57 PM

如何實現Bootstrap模態框動態獲取表格行數據並填充表單

本教程詳細介紹瞭如何利用Bootstrap的data-*屬性和JavaScript事件,實現從HTML表格中點擊按鈕時,將對應行的數據(如電子郵件地址)動態傳遞給一個單一的Bootstrap模態框,並自動填充模態框內的表單字段。這種方法避免了在循環中重複定義模態框,提高了代碼效率和可維護性,確保模態框始終顯示正確的數據。

在Web應用開發中,尤其是在展示表格數據時,我們經常需要為表格的每一行提供一個操作按鈕,點擊後彈出一個模態框(Modal)來執行編輯、回復等操作。一個常見的問題是,無論點擊哪一行的按鈕,模態框中的表單字段總是顯示相同(通常是第一行)的數據。這是因為模態框的HTML結構被重複定義在循環中,或者沒有正確地將動態數據傳遞給模態框中的表單元素。

本教程將提供一種高效且推薦的解決方案:將模態框定義為單一實例,並利用Bootstrap的JavaScript事件和HTML5的data-*屬性來動態填充模態框中的數據。

核心原理

實現動態數據傳遞的核心在於以下兩點:

  1. * `data-屬性:** 在觸發模態框的按鈕(或其他元素)上,使用data-bs-whatever(或其他自定義data-*`屬性)來存儲需要傳遞的動態數據。
  2. Bootstrap模態框事件:監聽Bootstrap模態框的show.bs.modal事件。當模態框即將顯示時,此事件會被觸發,並且可以通過event.relatedTarget屬性獲取到觸發模態框的那個按鈕元素。然後,我們可以從該按鈕的data-*屬性中提取所需數據,並將其填充到模態框內的表單字段中。

實現步驟

1. HTML表格結構與動態數據傳遞

首先,我們需要在PHP循環中構建表格行,並在每個“回复”按鈕上嵌入對應的電子郵件地址。這裡,我們利用Bootstrap的data-bs-target和data-bs-toggle屬性來指定要觸發的模態框,並使用data-bs-whatever屬性來傳遞當前行的電子郵件地址。

 
# 姓名 郵箱 主題 消息 時間 操作

注意:在輸出動態數據時,使用htmlspecialchars()函數進行轉義,以防止跨站腳本(XSS)攻擊。

2. Bootstrap模態框的定義

模態框的HTML結構應該只定義一次,並且位於PHP循環之外。模態框內部包含用於接收動態數據的表單字段,例如一個用於顯示收件人郵箱的輸入框。

 <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">新消息</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <form method="POST" role="form" enctype="multipart/form-data" action="">
                    <div class="row">
                        <!-- 收件人郵箱輸入框,用於動態填充-->
                        <div class="col-md-12 mb-3">
                            <label for="recipient-email" class="col-form-label">收件人:</label>
                            <!-- 注意:這裡的name屬性應與PHP處理時獲取的字段名一致-->
                            <input type="email" class="form-control" name="email" id="recipient-email" readonly>
                        </div>

                        <div class="col-md-12 mb-3">
                            <label for="email-subject" class="col-form-label">郵件主題:</label>
                            <input type="text" class="form-control" name="subject" id="email-subject">
                        </div>

                        <div class="mb-3">
                            <label for="message-text" class="col-form-label">消息內容:</label>
                            <textarea class="form-control" rows="8" name="message" id="message-text"></textarea>
                        </div>

                        <div class="col-md-12 mb-3">
                            <label for="attachment" class="col-form-label">附件</label>
                            <input type="file" class="form-control" name="file[]" multiple id="attachment">
                        </div>
                    </div>
                    <button name="submit" type="submit" class="btn btn-primary">發送郵件</button>
                </form>
            </div>
        </div>
    </div>
</div>

注意:

  • 模態框的id (exampleModal) 必須與觸發按鈕的data-bs-target值匹配。
  • 為收件人郵箱添加一個id (recipient-email),方便JavaScript操作。
  • 將收件人郵箱輸入框設置為readonly,通常預填充的郵箱不希望用戶隨意修改。

3. JavaScript數據填充邏輯

這是實現動態數據填充的關鍵步驟。我們需要編寫JavaScript代碼來監聽模態框的show.bs.modal事件。當事件觸發時,獲取觸發按鈕的data-bs-whatever屬性值,並將其設置到模態框中對應的輸入字段。

 // 獲取模態框DOM元素var exampleModal = document.getElementById('exampleModal');

// 監聽模態框的show.bs.modal 事件exampleModal.addEventListener('show.bs.modal', function (event) {
    // 獲取觸發模態框的按鈕var button = event.relatedTarget; // `relatedTarget` 是觸發模態框的DOM 元素// 從按鈕的data-bs-whatever 屬性中提取數據var recipientEmail = button.getAttribute('data-bs-whatever');

    // 獲取模態框中的標題和收件人輸入框var modalTitle = exampleModal.querySelector('.modal-title');
    var recipientInput = exampleModal.querySelector('#recipient-email'); // 根據ID獲取收件人輸入框// 更新模態框的標題和收件人輸入框的值modalTitle.textContent = '回复郵件給' recipientEmail;
    recipientInput.value = recipientEmail;
});

將這段JavaScript代碼放置在HTML文件的<script>標籤中,通常在</script>

以上是如何實現Bootstrap模態框動態獲取表格行數據並填充表單的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

如何檢查電子郵件地址在PHP中是否有效? 如何檢查電子郵件地址在PHP中是否有效? Sep 21, 2025 am 04:07 AM

usefilter_var()

如何在PHP中製作對象的深度副本或克隆? 如何在PHP中製作對象的深度副本或克隆? Sep 21, 2025 am 12:30 AM

useunSerialize(serialize($ obj))fordeepcopyingwhenalldataiSerializable;否則,exhiment__clone()tomanallyDuplicateNestedObjectedObjectSandAvoidSharedReference。

如何合併PHP中的兩個陣列? 如何合併PHP中的兩個陣列? Sep 21, 2025 am 12:26 AM

usearray_merge()tocombinearrays,oftritingDupritingDuplicateStringKeySandReIndexingNumericKeys; forsimplerconcatenation,尤其是innphp5.6,usethesplatoperator [... $ array1,... $ array2]。

如何在PHP項目中使用名稱空間? 如何在PHP項目中使用名稱空間? Sep 21, 2025 am 01:28 AM

NamespacesinPHPorganizecodeandpreventnamingconflictsbygroupingclasses,interfaces,functions,andconstantsunderaspecificname.2.Defineanamespaceusingthenamespacekeywordatthetopofafile,followedbythenamespacename,suchasApp\Controllers.3.Usetheusekeywordtoi

PHP中的魔術方法是什麼,並提供了'__call()和`__get()'的示例。 PHP中的魔術方法是什麼,並提供了'__call()和`__get()'的示例。 Sep 20, 2025 am 12:50 AM

__call()methodistred prightedwhenaninAccessibleOrundEfinedMethodiscalledonAnaBject,允許customhandlingByAcceptingTheMethodNameAndarguments,AsshoheNpallingNengallingUndEfineDmethodSlikesayHello()

如何在PHP中獲取文件擴展名? 如何在PHP中獲取文件擴展名? Sep 20, 2025 am 05:11 AM

usepathinfo($ fileName,pathinfo_extension)togetThefileextension; itreliablyhandlesmandlesmultipledotsAndEdgecases,返回theextension(例如,“ pdf”)oranemptystringifnoneexists。

MySQL條件聚合:使用CASE語句實現字段的條件求和與計數 MySQL條件聚合:使用CASE語句實現字段的條件求和與計數 Sep 16, 2025 pm 02:39 PM

本文深入探討了在MySQL中如何利用CASE語句進行條件聚合,以實現對特定字段的條件求和及計數。通過一個實際的預訂系統案例,演示瞭如何根據記錄狀態(如“已結束”、“已取消”)動態計算總時長和事件數量,從而克服傳統SUM函數無法滿足複雜條件聚合需求的局限性。教程詳細解析了CASE語句在SUM函數中的應用,並強調了COALESCE在處理LEFT JOIN可能產生的NULL值時的重要性。

如何在PHP中創建文件的郵政編碼? 如何在PHP中創建文件的郵政編碼? Sep 18, 2025 am 12:42 AM

使用ZipArchive類可創建ZIP文件,先實例化並打開目標zip,用addFile添加文件,支持自定義內部路徑,遞歸函數可打包整個目錄,最後調用close保存,確保PHP有寫權限。

See all articles