Wie erstelle ich einen Link dieses Typs:
<a href="#" onclick="document.getElementById('search').value=this.value">
Methode link_to
in Rails verwenden?
Ich konnte es nicht aus Rails-Dokumenten herausfinden .
Wie erstelle ich einen Link dieses Typs:
<a href="#" onclick="document.getElementById('search').value=this.value">
Methode link_to
in Rails verwenden?
Ich konnte es nicht aus Rails-Dokumenten herausfinden .
Antworten:
Sie können verwenden link_to_function
(in Rails 4.1 entfernt):
link_to_function 'My link with obtrusive JavaScript', 'alert("Oh no!")'
Oder wenn Sie unbedingt verwenden müssen link_to
:
link_to 'Another link with obtrusive JavaScript', '#',
:onclick => 'alert("Please no!")'
Das Einfügen von JavaScript in Ihr generiertes HTML ist jedoch aufdringlich und eine schlechte Praxis .
Stattdessen sollte Ihr Rails-Code einfach so aussehen:
link_to 'Link with unobtrusive JavaScript',
'/actual/url/in/case/javascript/is/broken',
:id => 'my-link'
Angenommen, Sie verwenden das Prototype JS-Framework , so lautet JS in Ihrem application.js
:
$('my-link').observe('click', function (event) {
alert('Hooray!');
event.stop(); // Prevent link from following through to its given href
});
Oder wenn Sie jQuery verwenden :
$('#my-link').click(function (event) {
alert('Hooray!');
event.preventDefault(); // Prevent link from following its href
});
Mit dieser dritten Technik stellen Sie sicher, dass der Link zu einer anderen Seite führt - und nicht nur stillschweigend fehlschlägt -, wenn JavaScript für den Benutzer nicht verfügbar ist. Denken Sie daran, dass JS möglicherweise nicht verfügbar ist, weil der Benutzer eine schlechte Internetverbindung hat (z. B. mobiles Gerät, öffentliches WLAN), der Benutzer oder der Systemadministrator des Benutzers diese deaktiviert hat oder ein unerwarteter JS-Fehler aufgetreten ist (z. B. Entwicklerfehler).
link_to_function
gibt es seit Rails 1.0, aber Sie haben Recht, dass es nicht entfernt wurde; es war veraltet (und dann nicht mehr veraltet und dann noch ein paar Mal umgedreht). Ich werde meine Antwort aktualisieren. Vielen Dank!
Um Rons Antwort zu verfolgen, wenn Sie JQuery verwenden und es in application.js oder im Kopfabschnitt einfügen, müssen Sie es in einen ready () - Abschnitt einschließen ...
$(document).ready(function() {
$('#my-link').click(function(event){
alert('Hooray!');
event.preventDefault(); // Prevent link from following its href
});
});
$(function() { ... });
, was$(document).ready(function() { ... });
$(function() { // Handler for .ready() called. });
anstelle von $ (document) .ready ()
Eine andere Lösung ist das Abfangen eines onClick-Ereignisses
.hmtl.erb
<%= link_to "Action", 'javascript:;', class: 'my-class', data: { 'array' => %w(foo bar) } %>
.js
// handle my-class click
$('a.my-class').on('click', function () {
var link = $(this);
var array = link.data('array');
});