Cómo llamar a la función de JavaScript en lugar de href en HTML


86

Tengo una maqueta en HTML

<a href="javascript:ShowOld(2367,146986,2)"><img title="next page" alt="next page" src="/themes/me/img/arrn.png"></a>

Recibí la respuesta del servidor cuando envié la solicitud.

Con esta maqueta obtuve como respuesta a una solicitud AJAX que envía mi código al servidor.

Bueno, todo está bien, pero cuando hago clic en el enlace, el navegador quiere abrir la función como enlace; lo que significa que después de hacer clic veo la barra de direcciones como

javascript:ShowOld(2367,146986,2)

significa que el navegador es URL si quiero hacer esto en Firebug, eso es trabajo. Ahora quiero hacer eso, cuando alguien hace clic en el enlace, el navegador intenta llamar a la función ya cargada en el DOM en lugar de intentar abrirlos en el navegador.


Una pregunta similar se responde en Stackoverflow. stackoverflow.com/questions/1070760/…
Scaria Sebastian

Respuestas:


192

Esa sintaxis debería funcionar bien, pero puede probar esta alternativa.

<a href="javascript:void(0);" onclick="ShowOld(2367,146986,2);">

o

<a href="javascript:ShowOld(2367, 146986, 2);">

RESPUESTA ACTUALIZADA PARA LOS VALORES DE CADENA

Si está pasando cadenas, use comillas simples para los parámetros de su función

<a href="javascript:ShowOld('foo', 146986, 'bar');">

¿Cómo pasar una cadena escapando de las comillas dobles en los argumentos? H = El ejemplo solo tiene números enteros.
jeffry copps

1
@jeffrycopps tratan comillas simples dentro de su función
ineedme

@ineedme Respuesta actualizada con esa información. Gracias.
Dutchie432

9

Si solo tiene como "controlador de eventos de clic", utilice un <button>. Un enlace tiene un significado semántico específico.

P.ej:

<button onclick="ShowOld(2367,146986,2)">
    <img title="next page" alt="next page" src="/themes/me/img/arrn.png">
</button>

¿Hay alguna forma de hacer que un botón parezca un enlace en lugar de un botón?
Ben Page

@Ben Page: Sí, con CSS. Al menos obtienes una buena aproximación. Vea mi respuesta y los comentarios aquí: stackoverflow.com/questions/4842953/or-javascriptvoid0/…
Felix Kling

7

Intente hacer que su javascript sea discreto:

  • deberías usar un enlace real en el atributo href
  • y agregue un oyente en el evento de clic para manejar ajax

hrefes opcional, simplemente omítalo.
Colin 't Hart

Una etiqueta es un ancla; no es necesario que tenga un enlace.
Colin 't Hart

5

Utilizo un poco de CSS en un tramo para que se vea como un enlace así:

CSS:

.link {
    color:blue;
    text-decoration:underline;
    cursor:pointer;
}

HTML:

<span class="link" onclick="javascript:showWindow('url');">Click Me</span>

JAVASCRIPT:

function showWindow(url) {
    window.open(url, "_blank", "directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
}

El parámetro de función 'url' anterior me da la cadena "url" en lugar de la url real
visrahane

Se supone que debes poner la URL real en la función showWindow. Por ejemplo: javascript: showWindow (' stackoverflow.com' );
tolsen64

No puedo codificar eso ya que lo estoy creando usando dom y no tengo control sobre la URL
visrahane

3

También debe separar el javascript del HTML.
HTML:

<a href="#" id="function-click"><img title="next page" alt="next page" src="/themes/me/img/arrn.png"></a>

javascript:

myLink = document.getElementById('function-click');
myLink.onclick = ShowOld(2367,146986,2);

Solo asegúrese de que la última línea de la función ShowOld sea:

return false;

ya que esto evitará que el enlace se abra en el navegador.


hrefes opcional, simplemente omítalo.
Colin 't Hart

3

<a href="#" onclick="javascript:ShowOld(2367,146986,2)">


8
No es la mejor solución, ya que saltará a la parte superior de la página.
Alex Marshall

Para href en lugar de #usarhref="javascript:void(0)
Narayan

hrefes opcional, simplemente omítalo.
Colin 't Hart

1

hrefes opcional para los aelementos.

Es completamente suficiente para usar

<a onclick="ShowOld(2367,146986,2)">link text</a>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.