2009-08-12 17 views
69

Estoy creando dinámicamente un hipervínculo en el código C# detrás del archivo de ASP.NET. Necesito llamar a una función de JavaScript en el clic del cliente. ¿Cómo logro esto?llame la función javascript en el hipervínculo haga clic en

+0

posible duplicado de [Cómo utilizar un Enlace Para Llamar JavaScript?] (Http://stackoverflow.com/questions/688196/how-to- use-a-link-to-call-javascript) – Trilarion

Respuesta

112

más limpio todavía, en lugar de la typical href="#" o href="javascript:void" o href="whatever", creo que esto tiene mucho más sentido:

var el = document.getElementById('foo'); 
el.onclick = showFoo; 


function showFoo() { 
    alert('I am foo!'); 
    return false; 
} 

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a> 

Si Javascript falla, hay algunos comentarios. Además, se elimina el comportamiento errático (salto de página en el caso de href="#", visitando la misma página en el caso de href="").

+13

+1 Esta es actualmente la única respuesta discreta. +100 si pudiera. – James

+0

@Chris - No estoy seguro de entender mi punto Chris. Sugiero que no use Do nothing y en su lugar use Do something y luego use la mejora progresiva para anular el href. Esta es la solución más limpia. Los anclajes están bien, pero deberían hacer ALGO si javascript está desactivado, o por alguna razón (según IE6) algunos javascript se rompieron antes de que el controlador se haya creado y asignado. De esta forma, todos tus usuarios están contentos. – Lewis

20

Con el parámetro onclick ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a> 
1

Utilice la onclick HTML attribute.

El controlador de eventos onclick captura un evento clic desde el botón del ratón de los usuarios en el elemento al que se aplica el atributo onclick. Esta acción lo general resulta en una llamada a un método la escritura como una función de JavaScript [...]

4

Lo ideal sería evitar la generación de enlaces en su código por completo, ya que su código necesitará recompilar cada vez que quiera hacer un cambio en el 'marcado' de cada uno de esos enlaces. Si tiene que hacerlo, no insertaría sus 'llamadas' de javascript dentro de su HTML, es una mala práctica, su marcado debe describir su documento, no lo que hace, ese es el trabajo de su javascript.

utilizar un enfoque donde se tiene una identificación específica para cada elemento (o clase si su funcionalidad común) y luego usar la consolidación progresiva para agregar el controlador de eventos (s), algo así como:

[c# example only probably not the way you're writing out your js] 
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>"); 

[Javascript] 
document.getElementById('uxAncMyLink').onclick = function(e){ 

// do some stuff here 

    return false; 
    } 

De esa manera su código no se romperá para los usuarios con JS desactivado y tendrá una clara separación de preocupaciones.

Espero que sea de uso.

+0

¿Por qué C#? ¿Por qué no solo 'My Link'? – Mahmoodvcs

2

En general, recomendaría usar element.attachEvent (IE) o element.addEventListener (otros navegadores) sobre la configuración del evento onclick directamente ya que este último reemplazará cualquier controlador de eventos existente para ese elemento.

attachEvent/addEventListening permiten crear múltiples controladores de eventos.

13

La respuesta de JQuery. Desde JavaScript se inventó con el fin de desarrollar jQuery, te estoy dando un ejemplo en jQuery hacer esto:

<div class="menu"> 
    <a href="http://example.org">Example</a> 
    <a href="http://foobar.com">Foobar.com</a> 
</div> 

<script> 
jQuery('div.menu a') 
    .click(function() { 
     do_the_click(this.href); 
     return false; 
    }); 

// play the funky music white boy 
function do_the_click(url) 
{ 
    alert(url); 
} 
</script> 
+44

JavaScript fue inventado para desarrollar jQuery? Esa es una nueva! – palswim

+29

Esto fue como leer que Lego fue inventado para construir Lego Batman. –

+4

@ShawnSolomon Estoy feliz de que estemos de acuerdo :) – elcuco

4

Yo prefiero usar el método onclick en lugar de la href para hipervínculos de JavaScript. Y siempre use alertas para determinar qué valor tiene.

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

Podría ser también utilizado en las etiquetas de entrada por ejemplo.

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>

43

La respuesta más sencilla de todas es ...

<a href="javascript:alert('You clicked!')">My link</a>

o para responder a la cuestión de llamar a una función javascript:

<script type="text/javascript"> 
 
function myFunction(myMessage) { 
 
    alert(myMessage); 
 
} 
 
</script> 
 

 
<a href="javascript:myFunction('You clicked!')">My link</a>

+7

Eres una bendición enviada para ayudar a los programadores que no son javascript. gracias Jayden! – Fattie

+0

Esto no parece funcionar en firefox – Anthony

+0

Anthony parece funcionar bien en Firefox. –

0

Si no espera a que se cargue la página, no podrá seleccionar el elemento mediante el id. Esta solución debería funcionar para cualquier persona que tenga problemas para conseguir el código para ejecutar

<script type="text/javascript"> 
window.onload = function() { 
    document.getElementById("delete").onclick = function() {myFunction()}; 

    function myFunction() { 
     //your code goes here 
     alert('Alert message here'); 
    } 
}; 
</script> 

<a href='#' id='delete'>Delete Document</a> 
Cuestiones relacionadas