Подтвердить что ты не робот

Link_to и событие click в Rails

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

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

используя метод link_to в Rails?

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

4b9b3361

Ответ 1

Вы можете использовать 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), пользователь или пользовательский sysadmin отключил его или возникла непредвиденная ошибка JS (т.е. Ошибка разработчика).

Ответ 2

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

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

Ответ 3

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

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