Comment faire pour lier un jQuery événement onclick avec Coffeescript, dans les Rails?
Je me rends compte que j'ai probablement besoin de déclarer l'événement onclick dans le monde, mais j'essaie d'éviter d'utiliser le --bare
balise lors de la compilation.
C'est le code que j'essaie de le faire travailler...
jQuery ->
$('.tabs_image').click ->
$(this).addClass('tabs_selected')
$('.tabs_video').removeClass('tabs_selected')
$('#image_upload_form').show()
$('#video_upload_form').hide()
return
$('.tabs_video').click ->
$(this).addClass('tabs_selected')
$('.tabs_image').removeClass('tabs_selected')
$('#image_upload_form').hide()
$('#video_upload_form').show()
return
return
Il fonctionne très bien une fois que la page est difficile de mise à jour (actualisation de la souris) dans le navigateur Chrome.
J'ai essayé $ =>
, $(document).ready ->
, et $(document).ready =>
.
- "Il fonctionne très bien une fois que la page a été actualisée dans le navigateur Chrome." Si le contenu est dynamique ajouté, you aurez à utiliser délégué événements.
- Dans ce cas, le contenu existe déjà; il n'est pas dynamiquement ajoutés. Je vais essayer malgré tout. C'est dans une application Rails, donc je ne sais pas si cela aurait un effet
Vous devez vous connecter pour publier un commentaire.
Pour ceux qui utilisent Turbolinks
Ajouter
data-no-turbolink
au conteneur parent du lien(s) comme si...jQuery.ready()
À l'aide de l'événement crochet
page:change
, vous pouvez remplacer lejQuery.ready()
avec$(document).on 'page:change', ->
ou, encore mieux$(document).on 'ready page:change', ->
; mieux, car cela signifie que même si turbolinks est pas en cours d'exécution (en raison d'être sur une ancienne version de navigateur peut-être), l'appel de déclenchement en raison deready
être là....ou...
Vous pouvez utiliser le jquery-turbolinks gem.
Gemfile:
bundle install
, puis l'ajouter à l'option JavaScript de votre fichier de manifeste, dans cet ordre:Je dirais que vous devriez être en utilisant les événements de la délégation de toute façon.
Essayer quelque chose comme cela et voir si vous obtenez de meilleurs résultats:
page:load
travaille en remplaçant votre$ ->
avec$(document).on 'page:load', ->
ou$(document).on 'ready page:load', ->
charge les dom avec
$(document).on 'ready page:load', ->
au lieu dejQuery ->
vous pouvez en lire plus sur le Les Rails De La Documentationpage:change
quepage:load
(source)