Tengo el problema de cómo seguir mostrando un aviso hasta que el usuario ingrese su año de nacimiento siempre es más pequeño que el año actual. Aquí está mi código. Intento usar loop pero ahora lucho. Espero que alguien me pueda ayudar, se lo agradezco.
<body> <p id= "age"></p> <button onclick=" notify()">Try it</button> <script> function notify(){ let age = prompt("Your birth year"); const year = new Date().getFullYear(); do { document.getElementById("age").innerHTML = age + " is a good year"; } while (age < year && age != null); } </script> </body>Podrías usar la recursividad:
<body> <p id="age"></p> <button onclick="notify()">Try it</button> <script> age_p = document.getElementById("age"); function notify() { let age = prompt("Your birth yeat"); const year = new Date().getFullYear(); if (parseInt(age) < year) { age_p.innerHTML = age + " is a good year"; } else { notify(); } } </script> </body>Dos cosas a comprobar:
la prueba de "si la edad es mayor o igual al año actual continúa en bucle" parece estar en el camino equivocado. Pruebe >= en lugar de < como operador de comparación edad/año.
Asegúrese de prompt nuevamente si el año ingresado es inaceptable.
Muestre el fragmento para ver una versión funcional:
function notify(){ let age; const year = new Date().getFullYear(); do { age = prompt("Your birth year"); } while (age >= year && age != null); document.getElementById("age").innerHTML = age + " is a good year"; } <p id= "age"></p> <button onclick=" notify()">Try it</button>Esta solución sugerida modifica considerablemente su código para tratar de mejorar tanto la UX como la capacidad de mantenimiento.
prompt es fácil de configurar para nosotros, pero tiende a ser complicado para el usuario. (Un elemento de input , en este caso uno numérico, suele ser la mejor manera de obtener la entrada del usuario).(Aquí también hay cambios de estilo, pero estos son solo preferencias personales y pueden ignorarse con seguridad).
(Consulte los comentarios en el código para obtener más aclaraciones).
// Gets current year, and identifies some DOM elements const year = new Date().getFullYear(), yearInput = document.getElementById("year-input"), outputParagraph = document.getElementById("output-paragraph"), submitButton = document.getElementById("submit-button"); // Calls notify whenever button is clicked submitButton.addEventListener("click", notify); // Alternative listener setup you could try -- makes button unnecessary // yearInput.addEventListener("change", notify); // Chooses and shows message (by comparing inputted year to current year) function notify(){ const userYear = yearInput.value; let message; if(userYear === "") { message = ""; } else if(userYear > year){ message = "Greetings, time traveller"; } else { message = "You are fit for your age"; } outputParagraph.textContent = message; } input{ width: 8ch; } <label> Your birth year <input id="year-input" type="number" /> </label> <button id="submit-button">SUBMIT</button> <p id="output-paragraph"></p>