Alternativas para usar " # " en el atributo href [duplicar]


Posible Duplicado:
Href para enlaces Javascript: "# "o" javascript: void (0)"?

La etiqueta <a> se usa para crear hipervínculos, pero en esta era de jQuery y Ajax la estamos usando para cargar HTML en <div> s en la misma página que las etiquetas <a>.

Dicho esto, establecemos el atributo href como href="#", usando o más bien abusando del carácter # como marcador de posición junto con algunos efectos secundarios indeseables como la URL que se anexa con el carácter #.

Y si dejas el atributo href en blanco href = "", el enlace no parece funcionar.

¿Hay alguna manera de hacer esto de una manera más limpia, como mostrar algún texto o función ficticia en la barra de estado del navegador cuando el usuario pasa el cursor sobre el enlace y, sin embargo, hacer que el enlace haga lo que el programador pretendía?

Aquí está mi código.

<ul id="sidebarmenu1">
   // List that is converted into a menu... 
   <li> <a href="#" id="loadHotel" > HOTEL </a> </li>
   <li> <a href="#" id="loadCountry"> COUNTRY </a> </li>
   <li> <a href="#" id="loadCity"> CITY </a> </li>
</ul>

// The jQuery to load content into another div with Ajax
var loadUrl = "createHotel.php";
$("#loadHotel").click(function() {
    $("#mainContent").html(ajax_load).load(loadUrl);
}); 

// ajax function to load hotel ---> rooms page 

var url_loadRooms = "viewRooms.php";
$("#createRooms").click(function() {
    $("#mainContent").html(ajax_load).load(url_loadRooms);
});

Qué más puedo usar en lugar de "#" para hacer mi código limpio..?

Author: Community, 2009-12-09

8 answers

La mejor solución es no usar ningún marcador de posición ficticio en absoluto. Use una URL significativa que, si el enlace fuera seguido, le mostraría la información que obtendría de la solicitud AJAX.

Hago esto regularmente con mis aplicaciones web, usando Javascript para mejorar un sitio de trabajo. Por ejemplo, el HTML:

<a href="/users/index" rel="popup">View users</a>

El Javascript (jQuery):

$('a[rel*="popup"]').click(function() {
    loadPopup({    // whatever your favourite lightbox is, etc..
        url: this.href
    });
    return false;
});

Los beneficios de esto son numerosos. Su sitio es accesible para lectores de pantalla, rastreadores web y usuarios con javascript desactivado, e incluso aquellos con javascript activado obtendrán una URL significativa en su barra de estado, por lo que sabrán a dónde van.

 41
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 06:45:28

Normalmente uso esto:

href="javascript:void(0);"

Establecer el atributo href de un ancla en javascript:void(0); indica al navegador que este ancla no es un hipervínculo a otro documento o ancla,

 16
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 06:04:51

Si su controlador onclick devuelve false, el enlace no será seguido por el navegador. Prueba esto:

<a href="#" onclick="alert('No # in the address bar!'); return false;">Click Me</a>

EDITAR:

Si usted es absolutamente hellbent en no usar el octothorpe (ie. # símbolo), no tienes que hacerlo. Prueba esto:

<a href="" onclick="alert('No change in the address bar!'); return false;">Click Me</a>
 6
Author: Asaph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 06:56:49

¿Por qué necesita definir algo en href?

Así es como funciona= >

<a id="close-question-1871874" title="closes/opens question for answering....">
  close<span title="3 more vote(s) needed to close this question"> (2)</span>
</a>

Pero - si se supone que el enlace realmente navega en algún lugar-mantenga normal href
y solo e.preventDefault () comportamiento regular con jQuery.

 2
Author: Arnis Lapsa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 09:42:40

Nickf me adelantó; sin embargo, algunas cosas deben mencionarse. Nunca debe usar el protocolo "javascript" para un enlace (a menos que tal vez tenga la intención de que sea un bookmarklet). Es lo contrario de la mejora progresiva. Siempre que sea posible, el atributo href debe ser un recurso URI real para que pueda degradarse con gracia. En todas las demás situaciones, se recomienda " # " y se debe usar JavaScript adecuado para evitar que la página se desplace hacia arriba. Hay dos métodos para hacerlo. En el controlador de clics, evite la acción predeterminada o devuelva false.

$('a[rel*="popup"]').click(function(e) {
    e.preventDefault();
    loadPopup({url: this.href});
});

O

$('a[rel*="popup"]').click(function() {
    loadPopup({url: this.href});
    return false;
});
 1
Author: Justin Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:32

Usar el carácter "#" como marcador de posición básicamente hace que el enlace "esté activo."El navegador lo interpreta como una etiqueta que apunta a otra cosa. Si href está vacío, el navegador asumirá que la etiqueta a es solo otra etiqueta.

Una forma de evitarlo es asignar un CSS a una etiqueta diferente que emula la misma funcionalidad de la etiqueta a. Al pasar el ratón, cambia el subrayado, cambia de color, etc. Puede cambiar fácilmente el estado de la ventana y hacer que parezca que el usuario está haciendo clic en un enlace cuando en realidad no están haciendo clic en un enlace tanto como hacer un evento de clic.

De hecho, esa es la mejor opción, porque ejecutar solo una función JS a través de un enlace de eventos que no se puede usar sin JavaScript no debe considerarse un enlace en primer lugar.

 0
Author: Jeff Rupert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 06:11:39

Siempre uso esto:

<a href="javascript:;">Click to your heart's delight</a>

 0
Author: leepowers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 06:23:17

Tal vez no entiendo smething, pero si no hay ningún enlace, simplemente no debe usar un elemento en primer lugar. Utilice algunos o adjunte detectores de eventos a los elementos de la lista. Puede estilizar estos elementos para que tengan cursor: pointer; usando CSS.

Recuerde que los navegadores tienen algunas acciones especiales asociadas con los enlaces, como "abrir en una nueva pestaña", "guardar elemento de destino", etc. Cuando se usa el atributo dummy href='', estas acciones funcionan de forma rota, por lo que es mejor no usar enlaces en absoluto.

El por otro lado, si eres capaz de representar el contenido de estas partes ajaxificadas como páginas normales (y tiene sentido), sigue el consejo de nickf.

 0
Author: pawel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:59