Estoy creando un formulario y el atributo onsubmit tiene un método booleano de validación de formulario. Al final del método, no importa si ninguna de las entradas inválidas ha devuelto false o no, la variable sessionStorage debe actualizarse a true para que, al cargar la página nuevamente, la variable se vuelva a verificar. ¿Por qué la variable sigue siendo false si ninguna de las entradas devolvió false o no? Tenga en cuenta que el atributo de action de formulario conduce a la misma página (página de formulario). Así es como se ve mi validación:
<form action="form.jsp" onsubmit="return validate()"> <input type="text" id="foo" /> <input type="submit"> </form> var input = document.getElementById("foo"); // textbox function validate() { if (input.value.trim() === "") { return false; } sessionStorage.setItem("submitted","true"); } Tenga en cuenta que todas las entradas de formulario existen y la variable sessionStorage no se actualiza incluso después de que la función no devuelva false .
Intente envolver la llamada sessionStorage en un intento/captura para ver por qué está fallando.
function validate() { var input = document.getElementById("foo"); // textbox console.log('validate', input); if (input.value.trim() === "") { return false; } try { sessionStorage.setItem("submitted", "true"); } catch (e) { console.log(e); return false; } // (for demostration purposes return false) return false; } <form onsubmit="return validate()"> <input type="text" id="foo" /> <input type=submit> </form>Como alternativa, puede utilizar la casilla de verificación "Conservar registro" en DevTools para conservar los errores de la consola.
Mirando su código jsfiddle , la razón es porque está verificando su valor de esta manera:
if (sessionStorage.getItem("submitted") == true)Esto no es exacto ya que los datos almacenados allí son una cadena... así que para arreglar esto puedes hacer:
if (sessionStorage.getItem("submitted") == 'true')En realidad , ni siquiera puedes verificarlo así:
if (sessionStorage.getItem("submitted")) Porque eso devolverá true para cualquier valor no nulo, incluso 'false' .