<div class="input-group"> <label>💰 Monto a recargar (MXN)</label> <div class="amount-buttons" id="amountButtons"> <button type="button" class="amount-btn" data-amount="20">$20</button> <button type="button" class="amount-btn" data-amount="50">$50</button> <button type="button" class="amount-btn" data-amount="100">$100</button> <button type="button" class="amount-btn" data-amount="200">$200</button> <button type="button" class="amount-btn" data-amount="500">$500</button> </div> <div class="custom-amount"> <input type="number" id="customAmount" placeholder="Otra cantidad (MXN)" min="10" step="10"> </div> </div>
// Validar número Telcel (10 dígitos, empieza con 1, 2, 3, 4, 5, 6, 7, 8, 9? real: puede ser 55,56, etc) function isValidTelcelNumber(number) const clean = number.replace(/\D/g, ''); return clean.length === 10 && /^[0-9]10$/.test(clean); mi telcel recarga
<button class="btn-recargar" id="recargarBtn"> ⚡ Realizar Recarga </button> <div id="statusMessage" class="message"> 💡 Selecciona un monto e ingresa tu número </div> </div> <footer> 🔒 Simulación segura · Conectado a Telcel API (demo) </footer> </div> 💰 Monto a recargar (MXN)<
// Función para limpiar selección visual function clearSelectedButtons() amountBtns.forEach(btn => btn.classList.remove('selected')); div class="amount-buttons" id="amountButtons">
// Cuando el usuario escribe un monto custom, anula la selección de botones customAmountInput.addEventListener('input', (e) => clearSelectedButtons(); const val = e.target.value.trim(); if (val !== '') const num = parseFloat(val); if (!isNaN(num) && num > 0) selectedAmount = num; statusDiv.innerHTML = `✏️ Monto personalizado: $$num MXN`; else selectedAmount = null; statusDiv.innerHTML = `⚠️ Ingresa un monto válido (mínimo $10)`; else selectedAmount = null; statusDiv.innerHTML = `💡 Selecciona un monto predefinido o escribe uno`; statusDiv.classList.remove('error-msg', 'success-msg'); );
// Simular proceso de recarga async function realizarRecarga(phone, amount) // Simulación de llamada a API return new Promise((resolve, reject) => setTimeout(() => // Condiciones simuladas: número no puede ser 0000000000, monto mínimo 10 if (phone === '0000000000') reject(new Error('Número no válido (simulación)')); else if (amount < 10) reject(new Error('El monto mínimo de recarga es $10 MXN')); else if (amount > 3000) reject(new Error('Monto máximo permitido: $3,000 MXN')); else resolve( success: true, message: `Recarga exitosa: $$amount MXN a $phone. Saldo disponible en minutos.`, folio: 'TEL-' + Math.floor(Math.random() * 1000000) ); , 800); );
<script> // Estado actual del monto seleccionado let selectedAmount = null; const amountBtns = document.querySelectorAll('.amount-btn'); const customAmountInput = document.getElementById('customAmount'); const phoneInput = document.getElementById('phoneNumber'); const recargarBtn = document.getElementById('recargarBtn'); const statusDiv = document.getElementById('statusMessage');