2009-03-30 26 views
65

¿Cómo se crea un enlace de este tipo:método link_to y haga clic en evento en rieles

<a href="#" onclick="document.getElementById('search').value=this.value"> 

utilizando el método link_to en Rails?

No pude encontrarlo en Rails docs.

+1

A menos que haya dejado el '#' para abreviar, no parece tener mucho sentido usar link_to. ¿Por qué no usar una etiqueta a con el conjunto onclick como lo has hecho anteriormente? – Brian

Respuesta

170

Puede utilizar link_to_function (eliminado en Rails 4.1):

link_to_function 'My link with obtrusive JavaScript', 'alert("Oh no!")' 

O, si es absolutamente necesario utilizar link_to:

link_to 'Another link with obtrusive JavaScript', '#', 
     :onclick => 'alert("Please no!")' 

Sin embargo, poner JavaScript derecha en su HTML generado es obtrusivo, y es mala práctica.

En su lugar, el código de Rails simplemente debería ser algo como esto:

link_to 'Link with unobtrusive JavaScript', 
     '/actual/url/in/case/javascript/is/broken', 
     :id => 'my-link' 

Y asumiendo que usted está utilizando el Prototype JS framework, JS como este en su application.js:

$('my-link').observe('click', function (event) { 
    alert('Hooray!'); 
    event.stop(); // Prevent link from following through to its given href 
}); 

O si lo' re usando jQuery:

$('#my-link').click(function (event) { 
    alert('Hooray!'); 
    event.preventDefault(); // Prevent link from following its href 
}); 

Por usi ng esta tercera técnica, usted garantiza que el enlace seguirá hasta alguna otra página — no solo fallará silenciosamente — si JavaScript no está disponible para el usuario. Recuerde, JS podría no estar disponible porque el usuario tiene una conexión a Internet deficiente (por ejemplo, dispositivo móvil, wifi público), el administrador del sistema del usuario o del usuario lo deshabilitó o se produjo un error inesperado de JS (es decir, error del desarrollador).

+0

link_to_function no se eliminó, pero se introdujo en Rails 3. Supongo que quería decir link_to_remote. – dimir

+0

'link_to_function' ha existido desde Rails 1.0, pero tiene razón en que no fue eliminado; estaba obsoleto (y luego desaprobado, y luego volteó algunas veces más). Actualizaré mi respuesta. ¡Gracias! –

+0

Si tengo una lista de acciones, y quería hacer algo similar. ¿Cómo obtendré el símbolo de stock en la función de clic? –

21

Para dar seguimiento a la respuesta de Ron si se utiliza jQuery y ponerlo en application.js o la sección de cabecera que necesita para envolverlo en una sección preparada() ...

$(document).ready(function() { 
    $('#my-link').click(function(event){ 
    alert('Hooray!'); 
    event.preventDefault(); // Prevent link from following its href 
    }); 
}); 
+3

Tenga en cuenta que esto se puede acortar a '$ (function() {...});', que es equivalente a '$ (document) .ready (function() {...});' – Confusion

+0

Por cierto [jquery 3.0] (http://api.jquery.com/ready/) recomienda usar '$ (function() { // Handler para .ready() llamado. });' en lugar de ** $ (document) .ready() ** –

+1

para rieles 5 con turbolinks use: $ (document) .on ('turbolinks: load', function() { – Brad

5

sólo tiene que utilizar

=link_to "link", "javascript:function()" 
Cuestiones relacionadas