Django jQuery не работает?


Вот как выглядит мой шаблон:

{% extends 'typer/base.html' %}
{% load url from future %}

{% load staticfiles %}

{% block title %}{{ p_name }}{% endblock %}

{% block body_block %}
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script>
<script>
    $('#user_passage_text').on('keyup', function(e) {
        if ( e.which === 13 ) {
        var time = (new Date()).getTime() - $(this).data('time');
        $(this).data('time', 0);
        console.log('Time passed : ' + time + ' milliseconds');

        }else if ( !$(this).data('time') ){
            $(this).data('time', (new Date()).getTime());
        }
    });
</script>

    <h1>{{ p_name }}</h1>
    <p>This passage is {{ p_wlength }} words, {{ p_clength }} characters long.</p>
    {% if passage %}
        <p><blockquote>{{ p_text_body|linebreaksbr }}</blockquote></p>

    {% else %}
        The specified text {{ p_name }} does not exist!
    {% endif %}

    <p>
        Begin typing to start the test.
    </p>
    <textarea id="user_passage_text"></textarea>


{% endblock %}

Все, что я хочу для этого сделать, это распечатать сообщение на консоль, чтобы проверить, что функция работает. Причина, по которой я смущен тем, что он не работает, заключается в том, что я могу запустить его на http://jsfiddle.net/d8c4z300/ прекрасно. Так почему же сообщение печатается там, но не тогда, когда я запускаю шаблон django?

1   2   2015-01-01 13:48:23

1 ответ:

Вам нужно $(function(){ ... }) (или $( document ).ready(function() { ... });, что равно, только длиннее) вокруг вашего кода js:

Итак:

$(function(){

  $('#user_passage_text').on('keyup', function(e) {
    if ( e.which === 13 ) {
    var time = (new Date()).getTime() - $(this).data('time');
    $(this).data('time', 0);
    console.log('Time passed : ' + time + ' milliseconds');

    }else if ( !$(this).data('time') ){
        $(this).data('time', (new Date()).getTime());
    }
  });

});

Скрипка работает, потому что вы установили ее в onload, что почти равно $(function(){ ... }) здесь.