Diferencia entre action = “” y action = “#” en HTML

He visto dos métodos para establecer el atributo de acción de un formulario.

# 1. Un atributo de acción vacío:

action="" 

# 2. Atributo de acción con # :

 action="#" 

¿Cuáles son las diferencias entre los dos?

El primero ( "" ) se resuelve en la URL base y el segundo ( # ) se resuelve en la URL del documento.

El siguiente es perfectamente válido:

 

Ahora tenga cuidado, de acuerdo con la especificación HTML4 , el atributo de action es obligatorio y debe contener un URI válido. Pero de acuerdo con el URI RFC , un URI vacío sigue siendo un URI:

Una referencia de URI que no contiene un URI es una referencia al documento actual. En otras palabras, una referencia de URI vacía dentro de un documento se interpreta como una referencia al comienzo de ese documento, y una referencia que contiene solo un identificador de fragmento es una referencia al fragmento identificado de ese documento. El recorrido de tal referencia no debe dar como resultado una acción de recuperación adicional. Sin embargo, si la referencia de URI ocurre en un contexto que siempre tiene como objective generar una nueva solicitud, como en el caso del elemento FORM del HTML, una referencia de URI vacía representa el URI base del documento actual y debe ser reemplazada por ese URI cuando se transforma en una solicitud.

(extracto de esta página )


Aunque es obligatorio, la mayoría de los navegadores, si no todos, se publicarán de nuevo en el originador de la respuesta si no se especifica ningún atributo de acción.

Y en HTML5, el atributo de action no es obligatorio. De las especificaciones :

Los atributos de acción y contenido de formación, si se especifican , deben tener un valor que sea una URL válida no vacía potencialmente rodeada de espacios.

Relacionado:

  • ¿Es una buena práctica usar una URL vacía para el atributo de acción de un formulario HTML? (acción = “”)

El primero se resuelve en la URL de la página actual * (preservando cualquier identificador de fragmento en la URL y también puede omitir el atributo de action completo), el otro en la parte superior de la página (borrando cualquier identificador de fragmento que ya exista).


* Dada la resolución URL normal, creo que se resolvería hasta la última / antes de la cadena de consulta y el ID de fragmento en la URL de la página actual, pero los casos especiales HTML 5 vacían cadenas aquí (paso 8) (presumiblemente por compatibilidad con versiones anteriores ya que la mayoría de los navegadores lo he implementado de esta manera históricamente).