Ok, estoy completamente desconcertado por esto... trabajando en PHP con algo de Javascript.
He creado dos formularios casi idénticos con solo un botón de envío. El primero en la página nunca activa la llamada a la función onsubmit, pero el segundo siempre lo hace. Aquí está el código:
echo('<form action="restricted.php?page=dashboard&sm=unitreport" name="form1" method="post" onsubmit="alert(`test1`);">'); echo('<input type="submit" name="testsubmit1" value="submit1">'); echo('</form>'); echo('<form action="restricted.php?page=dashboard&sm=unitreport" name="form2" method="post" onsubmit="alert(`test2`);">'); echo('<input type="submit" name="testsubmit2" value="submit2">'); echo('</form>');La ÚNICA diferencia entre estos dos es que los numeré "1" y "2".
Con el código anterior, nunca recibo la alerta "test1" pero siempre recibo la alerta "test2".
Si invierto el orden de estos dos formularios, nunca recibo la alerta "test2" pero siempre recibo la alerta "test1".
En otras palabras, solo activa la llamada onsubmit para el segundo formulario y nunca el primero , pero no tengo ni idea de por qué.
He estado tratando de resolver esto durante una hora a través de prueba y error y no importa lo que intente, no he podido hacer que ambos formularios activen sus respectivas funciones de envío. w3schools.com y las búsquedas de Google tampoco han proporcionado ninguna pista.
¿Algunas ideas?
Ok... Así que encontré la solución a mi problema, y no era para nada lo que esperaba. Decidí publicarlo como una respuesta para ayudar en caso de que alguien más tenga un problema similar.
Seguí adelante y copié el código en una nueva página en blanco y, efectivamente, funcionó bien. Ambos formularios activaban sus respectivos mensajes.
Resulta que unas 500 líneas de código antes, había otro formulario html y, de alguna manera, la etiqueta del formulario de cierre se eliminó y pasó desapercibida.
Por lo tanto, el "primero" de mis dos formularios se interpretó como una continuación del formulario anterior en mi código, ¡que no tiene una llamada de envío!
¡Do! Vergonzosa lección aprendida.