2016-09-03 3 views
1

Попытка научить меня использовать js в рельсах, и я нашел хорошее видео по этой теме, но почему-то это не работает для меня, и я не могу понять, почему.Базовый javascript; alert on click

приложение/просмотров/static_pages/help.html.erb:

... 
<p><%= link_to "Description", "#", id: "desc-link" %></p> 
... 

приложение/JavaScripts/static_pages.coffee:

$(document).on "page:change", -> 
    $("#desc-link").click -> 
     alert "Done!" 

Если я нажимаю на ссылку, ничего не происходит (нет ошибки или).

+0

Вы загрузили jquery? –

+0

Вы имеете в виду строку «// = require jquery» в application.js? Если да, то да. – Bubibob

+0

@Bubibob: Загрузите jquey & use $ (document) .on «ready» вместо страницы: load –

ответ

3

В рельсах 5.

Я перезагрузил сервер после оных требуют Jquery

мой рабочий код

$(document).on('turbolinks:load', -> 
    $("#desc-link").click -> 
     alert("Done!") 
    ) 

или

$(document).on('turbolinks:load', -> 
    $("#desc-link").on 'click', -> 
     alert("Done!") 
    ) 
+0

Это сработало, спасибо! Любая идея, хотя почему другие не сделали этого? Это связано с тем, что я использую рельсы 5? – Bubibob

+0

В рельсах 5 у вас есть турбовинты (5 в этом случае). Поэтому javascript следует запускать после загрузки страницы. Событие: «turbolinks: load». Если вы сразу же запускаете javascript, у DOM нет объектов. Пожалуйста, прочитайте [documentation] (https://github.com/turbolinks/turbolinks) турбонауки. В рельсах страницы загружаются через AJAX без перезагрузки, поэтому DOM асинхронно загружается. – mateo

+0

Что больше '$ (document) .ready ->' выполняется только при загрузке первой страницы и каждом 'F5' :) – mateo

0

Попробуйте

$(document).ready -> 
    $('#desc-link').on 'click', -> 
     alert 'Done!' 
     return 
    return 
+0

Нет, извините. Также не работает:/ – Bubibob