el formulario no debe enviarse, ingrese si el enfoque no está en el botón de envío

Tengo un requisito donde el usuario no puede enviar el formulario si presiona la tecla Intro a menos que el foco esté en el botón Enviar.

Usando el siguiente código, puedo hacer eso, pero ahora el problema es que, si tengo algún evento clave de ingreso asociado específicamente a cualquier campo (por ejemplo, si deseo adjuntar evento clave de ingreso a un campo de texto para algún requisito especial), es No me lo permite por el guión que he escrito abajo.

 $(document).keydown(function(event) { if (event.keyCode == 13) { var $focusedItem = $(document.activeElement); if($focusedItem.is("button") || $focusedItem.is("a") || $focusedItem.attr("type") == "submit") { $focusedItem.click(); } else { event.preventDefault(); } } });  

Cualquier solución en la que pueda restringir al usuario el envío del formulario al presionar la tecla Intro, si el foco no está en el botón de envío, pero al mismo tiempo, si hay algún evento de ingreso de clave adjunto a cualquier campo de formulario, también debería funcionar.

Si hubiera creado un JsFiddle sería más fácil ayudar. Sin embargo, estoy pensando que deberías hacer algo como esto:

 if($focusedItem.attr('id') == 'submitButton') { if (event.keyCode == 13) { submit the form } }else if ($focusedItem.attr('id') == 'Anothertextarea') { if (event.keyCode == 13) { do something special } }else{ if (event.keyCode == 13) { return null; } } 

Eliminar la línea event.stopPropagation (); de su script, solo necesita el preventDefault () (impide el envío).

Cuando hace stopPropagation (), detiene todos los demás eventos de pulsación de tecla en el elemento.

Intenta eso y ve si se ajusta a tus necesidades:

–MANIFESTACIÓN–

 $(document).on('submit', 'form', function (e) { e.preventDefault(); }).on('click', ':submit', function (e) { if (!$(document.activeElement).is(':submit')) return; var form = $(this).closest('form').length ? $(this).closest('form')[0] : $('#' + $(this).attr('form'))[0]; form.submit(); }); 

Tal vez me esté perdiendo el punto, esto es básicamente un problema de html estándar.

No le dé al formulario una acción de envío (muévalo a un evento de clic directamente en el botón) y cambie todos los tipos de botón a botón en lugar de enviar.

No puedo recordar si basta con eliminar el envío del formulario. Si no es así, simplemente haga onSubmit = “return false;” Creo que eso lo hace.

Sin embargo, como nota, el requisito para esto como comportamiento global es probablemente incorrecto y si es para el gobierno, entonces probablemente tendrá problemas ya que no cumple con las pautas de accesibilidad.