2013-12-14 3 views
8

Я пытаюсь заменить текстовую ссылку на счетчик при нажатии. У меня есть это:Rails, Turbolinks и spinner

$(document).on('page:fetch', function(e) { 
    $('.spinner').replaceWith("<img src='<%= asset_path('layout/spinner.gif') %>'>"); 
}); 

Но очевидно, что все ссылки с классом .spinner получаются с помощью счетчика. Я хочу заменить только на , нажав ссылку и только если он имеет класс spinner.

Любые предложения?

+0

Позвольте мне понять, правильно ли я понимаю: когда щелкнули ссылку, вы хотите, чтобы ее заменили счетчиком? –

+0

Да! Щелкнутая ссылка (та, которая вызвала страницу: выборка). – jriff

+0

И эти ссылки находятся внутри раздела страницы, которое выбрано? –

ответ

3

У вас будет код, который запускается на обеих страницах: загрузка и готовые события, чтобы они работали для загрузки полной страницы и загрузки страниц Turbolinks. В приведенном ниже коде будет добавлен атрибут «data-click» со значением true на «.spinner», который был нажат.

#inside both the ready and 'page:load' events 
$('.spinner').on('click', function(e) { 
    $(this).attr('data-clicked', true); 
}); 

ниже код будет искать «.spinner» с атрибутом данных клики со значением истины и применить вращатель изображение на нем.

$(document).on('page:fetch', function(e) { 
    $('.spinner[data-clicked="true"]').replaceWith("<img src='<%= asset_path('layout/spinner.gif') %>'>"); 
}); 

Дайте мне знать, если это поможет.

+0

Не боюсь. Ничего не произошло. Я думаю, что содержимое обработчика события click не запускается. Выполнение JS на странице останавливается, прежде чем оно может быть выполнено. – jriff

+0

@jriff только что обновил мой ответ с помощью другого подхода. – Gjaldon

+0

ДА! Это было сделано (но вы должны изменить «щелчок данных» на «щелчок по данным» в верхнем фрагменте кода). – jriff

4

Используйте на события мыши, чтобы изменить связи с spinner класса, так что, когда они щелкают, они превращаются в блесны:

$('.spinner').on("click", function() { 
    $(this).replaceWith("<img src='<%= asset_path('layout/spinner.gif') %>'>"); 
}); 

Тогда, только те, которые кликали будут изменены.

+0

Это не сработает. Я боюсь. Я попробовал (невероятно точно тот же самый код, который вы придумали). Следующая страница загружается до замены содержимого. Я думаю, что Turbolinks делает что-то за кулисами. Код, который я вставил в моем вопросе, работает - показывается, что счетчик отображается до изменения страницы. Но это затрагивает все ссылки, которые не были намерены. – jriff

Смежные вопросы