Encontré un comportamiento sorprendente hoy, por el cual en una devolución de llamada de evento de restablecimiento de formulario, los valores no parecen haberse restablecido en realidad en el momento en que se activa la devolución de llamada. Esto me pareció muy extraño.
Un tiempo de espera tan corto como una interrupción en el flujo permite el acceso al valor de restablecimiento [esperado], pero sin esto, el valor de la entrada en la devolución de llamada de restablecimiento es el valor antes de que se haya restablecido realmente el formulario.
En el siguiente caso de prueba reducido, si verifico la radio 'no', luego hago clic en el botón de reinicio, la función de devolución de llamada registrará 'no' y luego 'sí'. ¡Hubiera esperado que fuera 'sí' y 'sí'!
const form = document.querySelector('form'); form.addEventListener('reset', () => { let getVal = () => form.querySelector('input:checked').value; console.log(getVal()); setTimeout(() => console.log(getVal()), 0); }); <form> <div> <label> <input type="radio" name="test" value="yes" checked>Yes </label> <label> <input type="radio" name="test" value="no">No </label> </div> <button type="reset">Reset Form</button> </form>¿Es intencional que la devolución de llamada para un restablecimiento de formulario se active antes de que el formulario se haya restablecido realmente? Si es así, ¿por qué es esto? ¿Hay alguna ventaja de esto? Me parecería mucho más lógico que el evento de reinicio se active inmediatamente después de que se restablezcan los valores, para permitir que la devolución de llamada funcione con ellos.