JS-скрипт работает только тогда, когда он встроен в код scala / html

0

У меня такой 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), он работает! Где ошибка?

  • 0
    Привет @JonathanLonowski, да, я пробовал с и без $(document).ready(function() {... В консоли нет ошибок.
  • 0
    В html есть только один #box, но я попытался изменить его на другое имя, и оно то же самое. С console.log консоль говорит «Running» и «0» для .lenght
Показать ещё 3 комментария
Теги:
coffeescript
playframework-2.1

1 ответ

2
Лучший ответ

поле div # загружается вызовом Ajax, нажав кнопку, а затем перед загрузкой его не существует. Это проблема?

Да, это вызовет это. И делегированное связывание, как правило, является решением.

Причина этого в том, что jQuery может привязывать события только к элементам, которые существуют в данный момент. Но, поскольку почти все события пузырь/распространяются через target .parents(), существующий родитель может использоваться для представления предполагаемого потомка.

$(document).on 'click', '#box', ->
  # ...

В этом случае document является существующим родителем, позволяя #box иметь привязку click созданную для него до его существования в DOM.

В противном случае привязка события может быть отложена до тех пор, пока элемент не будет существовать. Это то, что происходит для последней части вашего вопроса, так как <script> вставляется в DOM вместе с <div>.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню