本文讲解如何将随机生成的产品密钥自动填充至输入框,并添加校验逻辑,确保仅当用户输入与最新生成的密钥完全一致时才视为有效,涵盖 dom 绑定、状态管理与验证触发全流程。
本文讲解如何将随机生成的产品密钥自动填充至输入框,并添加校验逻辑,确保仅当用户输入与最新生成的密钥完全一致时才视为有效,涵盖 dom 绑定、状态管理与验证触发全流程。
要让表单真正“接受”生成的密钥(即仅允许该密钥通过验证),关键在于:分离密钥生成、存储与比对逻辑,而非仅显示密钥。原始代码只实现了生成与展示,缺少验证机制和输入绑定。下面是一个结构清晰、可维护性强的完整解决方案。
<p> <button id="generate">Generate Key</button> <code id="output"></code></p><p> <input id="input" type="text" placeholder="Enter generated key..." readonly /> <button id="acc">Validate</button></p>
(function() { const TOKENS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; let currentKey = ""; // ✅ 全局(模块内)密钥状态 // DOM 元素缓存 const generateEl = document.querySelector("#generate"); const inputEl = document.querySelector("#input"); const outputEl = document.querySelector("#output"); const accEl = document.querySelector("#acc"); // 工具函数:安全随机整数 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } // 生成密钥(支持自定义段长与段数) function generateProductKey(chars = 5, segments = 4) { let keyString = ""; for (let i = 0; i < segments; i++) { let segment = ""; for (let j = 0; j < chars; j++) { segment += TOKENS[getRandomInt(0, TOKENS.length - 1)]; } keyString += segment; if (i < segments - 1) keyString += "-"; } return keyString; } // 生成并同步密钥到 UI 与状态 function handleGenerate() { currentKey = generateProductKey(); outputEl.textContent = currentKey; inputEl.value = currentKey; inputEl.removeAttribute("readonly"); // 可编辑便于测试(生产环境可保留 readonly) inputEl.focus(); } // 验证输入是否匹配当前密钥 function handleValidate() { const userValue = inputEl.value.trim(); const isValid = userValue === currentKey; // 可视化反馈 inputEl.style.borderColor = isValid ? "#28a745" : "#dc3545"; inputEl.style.backgroundColor = isValid ? "#f8fff9" : "#fff5f5"; if (isValid) { alert("✅ Validation passed! Key accepted."); } else { alert("❌ Invalid key. Please use the latest generated one."); } } // 初始化事件监听 document.addEventListener("DOMContentLoaded", () => { generateEl.addEventListener("click", handleGenerate); accEl.addEventListener("click", handleValidate); });})();
通过以上实现,你不仅完成了“密钥生成 → 自动填充 → 手动验证”的闭环,更构建了一个结构清晰、职责分明、易于调试与迭代的前端验证模块。