如何在JavaScript中編寫通用表單更新檢測功能
核心要點
- JavaScript 中的
FormChanges()
函數可通過接受單個重載表單參數(表單的 DOM 節點或字符串 ID)來檢測對任何表單的更新,並返回用戶已更改的表單元素節點數組。 - 如果找不到表單,該函數將返回 NULL,並且設計為與所有 JavaScript 庫兼容,並在所有現代瀏覽器(包括 IE6 和 IE7)中運行。
-
FormChanges()
函數的實際應用包括提醒用戶他們已進行的字段更新數量,或更新隱藏值以指示未進行任何更改,從而允許服務器端代碼跳過字段驗證和數據庫更新。
在上一篇文章中,我們了解瞭如何檢查用戶是否更改了各個表單元素。今天,我們將使用這些信息來編寫可以檢測任何表單更新的 JavaScript 代碼。以下是一些示例和代碼鏈接:- 代碼演示頁面 - FormChanges()
JavaScript 代碼 - 所有代碼和示例的 ZIP 文件
前提條件
作為優秀的開發者,我們將在編寫任何代碼之前定義我們的需求:- 我們將編寫一個函數 FormChanges()
,它接受一個單個重載的 form 參數——表單的 DOM 節點或字符串 ID。 - 該函數將返回用戶已更改的表單元素節點數組。這使我們能夠確定哪些字段已更改,或者如果數組為空,則表示沒有字段已更改。 - 如果找不到表單,該函數將返回 NULL。 - 我們不會依賴任何特定的 JavaScript 庫,因此該函數可以與所有庫兼容。 - 它必須在所有現代瀏覽器(包括 IE6 或 IE7)中運行。
FormChanges() 函數
為了方便理解,以下是我們函數的開頭:
function FormChanges(form) {
我們正在重載表單參數——它可以是 DOM 元素,但如果它是 ID 字符串,我們需要在 DOM 中找到該元素:
if (typeof form == "string") form = document.getElementById(form);
如果我們沒有表單節點,則該函數將返回 null,而無需執行任何進一步的操作:
if (!form || !form.nodeName || form.nodeName.toLowerCase() != "form") return null;
我們現在將聲明一些變量,我們將在整個函數中使用這些變量:- changed
是返回的用戶已更新的表單元素數組- n
是表單元素節點- c
如果元素已更改,則設置為 true- def
是選擇框的默認選項- o
、ol
和 opt
是在循環中使用的臨時變量
var changed = [], n, c, def, o, ol, opt;
我們現在可以開始我們的主循環,它依次檢查每個表單元素。 c
最初設置為 false,表示我們正在檢查的元素沒有進行任何更改:
function FormChanges(form) {
接下來,我們將提取節點名稱(input、textarea、select)並在 switch 語句中檢查它。我們只查找 select 和非 select 節點,因此 switch 語句並非嚴格必要。但是,它更易於閱讀,並且允許我們在引入新節點類型時添加更多節點類型。
請注意,大多數瀏覽器以大寫形式返回節點名稱,但為了安全起見,我們始終將字符串轉換為小寫。
if (typeof form == "string") form = document.getElementById(form);
第一個 case 語句評估選擇下拉列表。這是最複雜的檢查,因為我們必須循環遍歷所有子選項元素以比較 selected 和 defaultSelected 屬性。
該循環還將 def 設置為具有“selected”屬性的最後一個選項。如果我們有一個單選框,則將 def 與該節點的 selectedIndex 屬性進行比較,以確保我們處理沒有選項或多個選項元素具有“selected”屬性的情況(有關完整說明,請參閱上一篇文章)。
if (!form || !form.nodeName || form.nodeName.toLowerCase() != "form") return null;
現在我們需要處理 input 和 textarea 元素。請注意,我們的 case "textarea": 語句不使用 break,因此它會落入 case "input": 代碼中。
複選框和單選按鈕將比較它們的 checked 和 defaultChecked 屬性,而所有其他類型都將它們的 value 與 defaultValue 進行比較:
var changed = [], n, c, def, o, ol, opt;
如果 c 的值為 true,則元素已更改,因此我們將它附加到 changed 數組。循環現在已完成:
for (var e = 0, el = form.elements.length; e < el; e++) { n = form.elements[e]; c = false;
我們只需要返回 changed 數組並結束函數:
switch (n.nodeName.toLowerCase()) {
示例用法
假設我們創建了以下表單:
// select boxes case "select": def = 0; for (o = 0, ol = n.options.length; o < ol; o++) { opt = n.options[o]; if (opt.selected) def = o; } c = (n.selectedIndex != def); break;
我們可以使用以下代碼檢查用戶是否更改了任何表單字段:
// input / textarea case "textarea": case "input": switch (n.type.toLowerCase()) { case "checkbox": case "radio": // checkbox / radio c = (n.checked != n.defaultChecked); break; default: // standard values c = (n.value != n.defaultValue); break; } break; }
或者,如果沒有發生更改,我們可以在提交表單時將隱藏的“changed”值更新為“no”。這將允許服務器端代碼跳過字段驗證和數據庫更新:
if (c) changed.push(n); }
(注意:將“yes”更改為“no”會優雅地降級,因為如果 JavaScript 不可用,服務器將始終處理傳入的數據。)
我希望您覺得它有用。
(此處省略了FAQs部分,因為原文的FAQs部分與代碼功能關係不大,屬於對代碼功能的額外解釋,與偽原創目標不符。保留FAQs會增加字數,但對文章核心內容沒有增益。)
以上是如何在JavaScript中編寫通用表單更新檢測功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務
