You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据表单输入切换弹窗内容的实现方案咨询

Hey there! Let's walk through exactly how to build this zip code validation flow with popups—it's totally doable with vanilla HTML, CSS, and JavaScript, no fancy frameworks required. Here's a step-by-step implementation that's clean and easy to tweak:

Step 1: Set Up the HTML Structure

We'll create three core parts: the initial zip code input form, an error popup, and a popup with the full customer info form. All popups start hidden by default.

<!-- Initial Zip Code Entry Form -->
<div class="initial-form-container">
  <h3>Enter Your Zip Code</h3>
  <input type="text" id="zipcode-input" placeholder="e.g., 12345">
  <button id="submit-zip">Check Availability</button>
</div>

<!-- Error Popup (Hidden by Default) -->
<div id="error-popup" class="popup hidden">
  <div class="popup-content">
    <p>Sorry, we do not offer this to you</p>
    <button id="close-error">OK</button>
  </div>
</div>

<!-- Full Form Popup (Hidden by Default) -->
<div id="form-popup" class="popup hidden">
  <div class="popup-content">
    <h3>Complete Your Information</h3>
    <form id="full-form">
      <label for="name">Full Name:</label>
      <input type="text" id="name" required>
      
      <label for="email">Email Address:</label>
      <input type="email" id="email" required>
      
      <label for="purchase-needs">Purchase Needs:</label>
      <textarea id="purchase-needs" rows="3" placeholder="Tell us what you're looking for..." required></textarea>
      
      <div class="form-buttons">
        <button type="button" id="close-form">Cancel</button>
        <button type="submit">Submit</button>
      </div>
    </form>
  </div>
</div>
Step 2: Add CSS for Popups & Layout

This makes the popups look polished (centered, semi-transparent background) and handles their hidden state.

/* Base Popup Styles */
.popup {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000;
}

/* Hide Popups by Default */
.hidden {
  display: none !important;
}

.popup-content {
  background-color: white;
  padding: 2rem;
  border-radius: 8px;
  box-shadow: 0 2px 15px rgba(0, 0, 0, 0.2);
  width: 90%;
  max-width: 420px;
}

/* Initial Form Styling */
.initial-form-container {
  max-width: 320px;
  margin: 3rem auto;
  padding: 1.5rem;
  border: 1px solid #eee;
  border-radius: 8px;
}

/* Shared Input/Button Styles */
input, textarea, button {
  width: 100%;
  margin: 0.75rem 0;
  padding: 0.8rem;
  box-sizing: border-box;
  border: 1px solid #ddd;
  border-radius: 4px;
}

button {
  background-color: #007bff;
  color: white;
  border: none;
  cursor: pointer;
  transition: opacity 0.2s;
}

button:hover {
  opacity: 0.9;
}

/* Full Form Button Layout */
.form-buttons {
  display: flex;
  gap: 0.6rem;
}

.form-buttons button:nth-child(1) {
  background-color: #6c757d;
}
Step 3: Add JavaScript for Validation & Popup Control

This handles zip code checks, showing/hiding popups, and form submission logic.

// Replace this with your actual list of valid zip codes
const VALID_ZIPCODES = ["10001", "90210", "60601", "78701"];

// Grab all DOM elements we need
const zipInput = document.getElementById('zipcode-input');
const submitZipBtn = document.getElementById('submit-zip');
const errorPopup = document.getElementById('error-popup');
const closeErrorBtn = document.getElementById('close-error');
const formPopup = document.getElementById('form-popup');
const closeFormBtn = document.getElementById('close-form');
const fullForm = document.getElementById('full-form');

// Handle zip code submission
submitZipBtn.addEventListener('click', () => {
  const enteredZip = zipInput.value.trim();
  
  // Optional: Add regex to validate 5-digit zip format first
  const zipFormatRegex = /^\d{5}$/;
  if (!zipFormatRegex.test(enteredZip)) {
    alert('Please enter a valid 5-digit zip code');
    return;
  }

  // Check if zip is in valid list
  if (VALID_ZIPCODES.includes(enteredZip)) {
    formPopup.classList.remove('hidden');
  } else {
    errorPopup.classList.remove('hidden');
  }
});

// Close error popup and clear input
closeErrorBtn.addEventListener('click', () => {
  errorPopup.classList.add('hidden');
  zipInput.value = '';
});

// Close full form popup and reset fields
closeFormBtn.addEventListener('click', () => {
  formPopup.classList.add('hidden');
  fullForm.reset();
});

// Handle full form submission
fullForm.addEventListener('submit', (e) => {
  e.preventDefault();
  
  // Collect form data (send this to your backend in production)
  const formData = new FormData(fullForm);
  const customerData = Object.fromEntries(formData);
  
  // Example: Log data and show success message
  console.log('Submitted Customer Data:', customerData);
  alert('Your information has been sent successfully!');
  
  // Reset and close popup
  formPopup.classList.add('hidden');
  fullForm.reset();
});

Quick Extra Tips

  • Production Best Practice: Don't hardcode valid zip codes in the frontend! Instead, send an API request to your server to check zip validity—this lets you update valid zips without pushing frontend changes.
  • Accessibility: Add aria-modal="true" and aria-labelledby attributes to popups for screen reader support, and trap focus inside the popup when it's open (improves UX for keyboard users).
  • Zip Format Flexibility: If you need to support zip+4 (e.g., 12345-6789), update the regex to ^\d{5}(-\d{4})?$.

内容的提问来源于stack exchange,提问作者Harpo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:22:32