метод link_to и событие click в Rails - PullRequest
69 голосов
/ 31 марта 2009

Как мне создать ссылку этого типа:

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

с использованием метода link_to в Rails?

Я не могу понять это из Rails docs .

Ответы [ 4 ]

184 голосов
/ 31 марта 2009

Вы можете использовать link_to_function (удалено в Rails 4.1):

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

Или, если вам абсолютно необходимо использовать link_to:

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

Однако вставка JavaScript прямо в сгенерированный HTML-код навязчива и плохая практика .

Вместо этого ваш код Rails должен просто выглядеть примерно так:

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

И при условии, что вы используете Prototype JS framework , JS, как это в вашем application.js:

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

Или, если вы используете jQuery :

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

Используя этот третий метод, вы гарантируете, что ссылка перейдет на какую-то другую страницу - не просто молча завершится неудачей - если JavaScript недоступен для пользователя. Помните, что JS может быть недоступен, потому что у пользователя плохое интернет-соединение (например, мобильное устройство, общедоступный Wi-Fi), пользователь или системный администратор пользователя отключил его или произошла непредвиденная ошибка JS (то есть ошибка разработчика).

24 голосов
/ 19 декабря 2010

Чтобы проконтролировать ответ Рона, если вы используете JQuery и помещаете его в application.js или заголовочный раздел, вам нужно поместить его в раздел ready () ...

$(document).ready(function() {
  $('#my-link').click(function(event){
    alert('Hooray!');
    event.preventDefault(); // Prevent link from following its href
  });
});
8 голосов
/ 15 января 2016

просто используйте

=link_to "link", "javascript:function()"
1 голос
/ 31 мая 2019

другое решение - перехват события onClick, а для агрегирования данных в функцию js вы можете

.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');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...