Javascript/jQuery слушатель не работает с шаблонами Underscore.js

Я создаю веб-приложение, используя underscore.js для создания шаблонов. Дело в том, что когда я рендеринг простого шаблона, как это:

<div id="container"></div>

<script type="text/template" id="person-template">
    <% person.forEach(function(p) { %>
        <a class="username"> <%= p.username %> </a>
    <% }); %>
</script> 

<script type="text/javascript">
    var container = document.getElementById('container');
    var template = document.getElementById('person-template');
    var renderTemplate = _.template(template.innerHTML);

    container.innerHTML = renderTemplate({
        person: /* ajax object callback response ... */
    });
</script>

Если я пытаюсь использовать идентификатор человека, чтобы сделать что-то с моим JavaScript. Функция не работает, и на консоли нет ошибок. Пример:

$('.username').click( function() {
    console.log('hello!');
});

Я также попробовал это, но это не работает:

  • $(document).ready( function...
  • $(container).find('.username').on('click', function...
  • Работает с window.setTimeout(funciton(){...},1500) но я хочу лучший способ сделать это.

Кстати, это очень простой пример, просто чтобы объяснить проблему.

1 ответ

Попробуй использовать:

$('body').on('click', '.username', function(e) {
    console.log('hello!');
});

Это будет работать для всех элементов с классом 'username' в теле, независимо от того, присутствуют они или добавляются динамически позже.

Другие вопросы по тегам