Cuando se carga una página Asp.Net aspx en mi sitio, un script de Javascript ejecuta una verificación de alguna condición y, si se cumple esa condición, debe establecer el valor de un elemento de entrada mediante programación y luego enviar el formulario, también mediante programación, utilizando el formulario. enviar(). Con esto, no estoy usando un evento de click o submit . El formulario debe procesarse en backend y luego la página debe volver a cargarse con los datos correctos (y lo hace correctamente).
Por alguna razón, esto parece funcionar bien en FireFox, pero se comporta de manera diferente en Chrome.
Lo que hace en Firefox es que después de form.submit() , la página se vuelve a cargar y mi Javascript se inicia desde el principio (ejecutando la verificación nuevamente), como se esperaba.
Sin embargo, en Chrome, parece que después de la llamada form.submit() , el Javascript simplemente continúa con el código Javascript restante. Probé form.requestSubmit() , pero eso no lo cambió.
Mi código:
// check if someCondition is true, if so, a form field needs to be set prgrammatically and then the form submitted. If condition is false, just continue if(someCondition){ VerifyBeforeCheck(); } DoTheNextThingIfConditionIsFalse(); //In Firefox, if VerifyBeforeCheck() is fired/ reached, this code never gets executed. In Chrome it will, but I don't want that. // simple wrapper function, because SubmitMyForm gets called from different events and methods. function VerifyBeforeCheck() { let newValue = sessionStorage.getItem("ItemFromSessionStorage"); let fld = document.getElementById("formInputField"); // grabs an <input> field field.value = newValue; // used in backend SubmitMyForm(); } function SubmitMyform(){ let form = document.getElementById('myForm'); form.submit(); }¿Es este un comportamiento realmente inesperado o me estoy perdiendo algo? Quiero que la situación en Chrome sea como es actualmente cuando lo ejecuto en Firefox: después del método de envío, se envía el formulario y luego se vuelve a cargar la página. Si necesito usar un preventDefault, ¿cómo puedo hacerlo sin el evento?