У меня такой div в файле scala.html моего шаблона (я использую PlayFramework):
<div id="box">Text in the box</div>
и этот сценарий кофе:
$("#box").on "click", ->
$("#box").fadeOut()
Это не работает: если я нажму на div #box, ничего не произойдет. Я пытаюсь использовать простой jquery, чтобы понять, если это проблема с кофе или нет. Затем я поместил тот же сценарий jQuery в <head>
:
<script>
$("#box").on("click", function() {
return $("#box").fadeOut();
});
</script>
и не работает снова, но если я поместил его в файл scala.html (который содержит div #box), он работает! Где ошибка?
поле div # загружается вызовом Ajax, нажав кнопку, а затем перед загрузкой его не существует. Это проблема?
Да, это вызовет это. И делегированное связывание, как правило, является решением.
Причина этого в том, что jQuery может привязывать события только к элементам, которые существуют в данный момент. Но, поскольку почти все события пузырь/распространяются через target
.parents()
, существующий родитель может использоваться для представления предполагаемого потомка.
$(document).on 'click', '#box', ->
# ...
В этом случае document
является существующим родителем, позволяя #box
иметь привязку click
созданную для него до его существования в DOM.
В противном случае привязка события может быть отложена до тех пор, пока элемент не будет существовать. Это то, что происходит для последней части вашего вопроса, так как <script>
вставляется в DOM вместе с <div>
.
$(document).ready(function() {...
В консоли нет ошибок.