ссылка на метод и нажмите событие в Rails


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

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

методом link_to в Rails?

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

3 66

3 ответа:

можно использовать 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'

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

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

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

просто использовать

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