Tengo un sitio web antiguo con JQuery 1.7 que funciona correctamente hasta hace dos días. De repente, algunos de mis botones ya no funcionan y, después de hacer clic en ellos, aparece esta advertencia en la consola:
Envío de formulario cancelado porque el formulario no está conectado
El código detrás del clic es algo como esto:
this.handleExcelExporter = function(href, cols) { var form = $('<form method="post"><input type="submit" /><input type="hidden" name="layout" /></form>').attr('action', href); $('input[name="layout"]', form).val(JSON.stringify(cols)); $('input[type="submit"]', form).click(); }Parece que Chrome 56 ya no admite este tipo de código. ¿no es así? Si es así mi pregunta es:
PD Tampoco funciona en la última versión de Firefox (sin ningún mensaje). ¡Tampoco funciona en IE 11.0 y Edge! (ambos sin ningún mensaje)
Respuesta rápida: agregue el formulario al cuerpo.
document.body.appendChild(form);
O, si está utilizando jQuery como se indica arriba: $(document.body).append(form);
Detalles: De acuerdo con los estándares HTML, si el formulario no está asociado al contexto de navegación (documento), se cancelará el envío del formulario.
ESPEC. HTML ver 4.10.21.3.2
En Chrome 56, se aplicó esta especificación.
Diferencia de código de Chrome ver @@ -347,9 +347,16 @@
PD sobre tu pregunta #1. En mi opinión, a diferencia de ajax, el envío de formularios provoca un movimiento de página instantáneo.
Por lo tanto, mostrar un "mensaje de advertencia en desuso" es casi imposible.
También creo que es inaceptable que este cambio serio no esté incluido en la lista de cambios de características. Funciones de Chrome 56: www.chromestatus.com/features#milestone%3D56
Si ve este error en React JS cuando intenta enviar el formulario presionando Intro, asegúrese de que todos los botones del formulario que no envían el formulario tengan un type="button" .
Si solo tiene un button con type="submit" , al presionar Enter se enviará el formulario como se esperaba.
Referencias :
https://dzello.com/blog/2017/02/19/demystifying-enter-key-submission-for-react-forms/ https://github.com/facebook/react/issues/2093
agregue el atributo type="button" al botón en el que hace clic, ve el error, funcionó para mí.